当前位置: 首页 > 知识库问答 >
问题:

自定义MessageListener到DefaultMessageListenerContainer被覆盖

姬成荫
2023-03-14

首先,我是Spring集成和Spring JMS方面的新手,所以我尝试采用的解决方案可能不适合我的需求。

我将尝试解释我需要实现什么:基本上,我需要将消息放在一个队列中,并在另一个队列中异步等待答案。

1、将消息放入队列:

我的解决方案:

<int-jms:outbound-gateway id="sendMessageOutboundGW"
                        connection-factory="jmsGatewayConnectionFactory"
                        request-channel="marshaledSendMessageJmsRequestChannel"
                        request-destination="sendMessageRequestQueue"
                        requires-reply="false"
                        reply-destination="sendMessageResponseQueue" 
                        correlation-key="JMSCorrelationID">
</int-jms:outbound-gateway>

--

2.异步监听来自另一个队列的回复消息:

我的解决方案1:

<bean id="messageListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="jmsGatewayConnectionFactory" />
<property name="destination" ref="sendMessageResponseQueue" />
<property name="messageListener" ref="messageListener" />
<property name="errorHandler" ref="sendMessageResponseErrorHandler" />
</bean>

<int-jms:message-driven-channel-adapter id="sendMessageInboundGW"
                                      container="messageListenerContainer"
                                      channel="sendMessageJmsResponseChannel" />

自定义MessageListener实现javax.jms.MessageListener。

然而,看起来我为messageListenerContainer设置的消息侦听器正在被覆盖,并且是一个org.springframework.integration.jms。改用ChannelPublishingJmsMessageListener。我可以在日志中看到,messageListenerContainer正在提取接收到的消息。

此外,使用此解决方案,我可以在日志中看到以下警告消息:提供的侦听器容器已经有了MessageListener实现,但它将被提供的ChannelPublishingJmsMessageListener覆盖。

我的解决方案2:

<bean id="messageListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="jmsGatewayConnectionFactory" />
<property name="destination" ref="sendMessageResponseQueue" />
<property name="messageListener" ref="messageListener" />
<property name="errorHandler" ref="sendMessageResponseErrorHandler" />
</bean>

<int-jms:inbound-gateway id="sendMessageInboundGW"
                       container="messageListenerContainer"
                       request-channel="sendMessageJmsResponseChannel"
                       request-destination="sendMessageResponseQueue"
                       correlation-key="JMSCorrelationID" />

我对这个解决方案也有同样的问题——自定义MessageListener正在被覆盖。

不使用自定义MessageListener,我得到以下错误:

org.springframework.messaging.core。DestinationResolutionException:没有可用的输出通道或replyChannel标头

我做错了什么?

任何帮助都将不胜感激。

共有1个答案

薛墨一
2023-03-14

使用Spring集成时,消息侦听器是入站网关。这就是您的侦听器bean被覆盖的原因。

有几种解决方案

>

  • 不是将侦听器连接到容器中,而是配置一个

    完全消除入站网关,自己处理消息-使用MessageListenerAdapter,将类设为POJO,适配器将路由回复。

    如果您不想使用MessageListenerAdapter,您的MessageListener负责路由回复,但我建议使用上面的第一种解决方案。

  •  类似资料:
    • 问题内容: 我正在使用Bootstrap 3,并且有一个显示一些数据的表。在此表中,我已应用了一些JavaScript进行条件格式设置,如果满足条件,则将元素的类设置为“红色” HTML的元素如下: 我现在在文本颜色适用的奇数行上有冲突,但是背景颜色被自举程序中的以下CSS覆盖。 我该如何解决此冲突并确保红色阶级有上风? 问题答案: 您的问题很可能与特异性有关。克里斯·科耶尔(ChrisCoyie

    • 在我的Spring应用程序中,我定义了类型的bean。 DefaultListableBeanFactory日志 信息10140---[main]o.s.b.f.s.DefaultListableBeanFactory:用不同的定义重写bean“Audit Listener”的bean定义:用[Root bean:class[demo.auditListener];scope=singleton;

    • 我开发了一个自定义的锁屏应用程序。基本上,当屏幕关闭时,应用程序将启动并解锁股票锁定屏幕,然后当屏幕打开时,用户将看到我的自定义锁定屏幕。到目前为止工作得很好,直到最近我发现,有时当我按下主页按钮时,屏幕会快速闪烁一次,当这种情况发生时,它会使我的自定义锁屏失败。当屏幕打开时,股票锁定屏幕将出现,我的自定义锁定屏幕只有在用户解锁股票锁定屏幕后才会显示。有人知道这个问题吗?或者任何建议?提前感谢。

    • 问题内容: 我想要的只是让bool(myInstance)返回False(以及在if / or / and等条件下让myInstance评估为False。我知道如何覆盖>,<,=) 我已经试过了: 有什么建议? (我正在使用Python 2.6) 问题答案: 这是Python 2.x还是Python 3.x?对于Python 2.x,您正在寻找替代方法。

    • 在苹果自带地图和百度地图上覆盖一层图片,图片可以随地图缩放移动。关键就是自定义Overlay和OverlayView。 作者说:实在无力吐槽了,百度地图iOS SDK中的静态库文件居然都是10M !由于过大上传不了,亲们自行去 http://developer.baidu.com/map/sdk-ios.htm 按提示添加SDK吧!至于基于百度地图的自定义Overlay和OverlayView 记

    • 目标: 在我的应用程序中,用户应该上传一个文件。如果上传了以外的文件,则小部件周围会出现一条警告消息()。如果用户更正了他的输入并上传了一个文件,消息应该会再次消失()。所有这些已经在应用程序中工作。但是现在我想将中进度条的颜色更改为另一种颜色,例如红色(如本例)。但是,警告消息仍然应该以默认的橙色显示。 问题: shinyFeedback会覆盖我的自定义CSS,并且进度条的颜色不会更改。我当然可