[英]How to configure a listener to handle messages from multiple exchanges for the same queue in rabbitmq spring
[英]Sending messages with Spring Messaging (Websockets) from a RabbitMQ Listener class
是否可以从RabbitMQ侦听器bean发送带有SimpMessageSendingOperations的消息?
我有以下侦听器类:
public class MyJobListener {
@Autowired
public SimpMessageSendingOperations messagingTemplate;
public void handleJob(JobMessage jobMessage) {
doWork(jobMessage);
messagingTemplate.convertAndSend("/topic/greetings", "TEST");
}
}
我的Rabbit配置文件是:
<!-- RabbitMQ configuration -->
<rabbit:connection-factory id="connectionFactory" host="${rabbitmq.connection.host}" port="${rabbitmq.connection.port}" />
<rabbit:admin connection-factory="connectionFactory" />
<rabbit:template id="amqpTemplate" connection-factory="connectionFactory" />
<!-- Queues -->
<rabbit:queue id="myQueue" name="myQueue" />
<!-- Listeners -->
<bean id="myListener01" class="com.xxx.MyJobListener" />
<bean id="myListener02" class="com.xxx.MyJobListener" />
<bean id="myListener03" class="com.xxx.MyJobListener" />
<bean id="myListener04" class="com.xxx.MyJobListener" />
<rabbit:listener-container connection-factory="connectionFactory" >
<rabbit:listener ref="myListener01" method="handleJob" queue-names="myQueue" />
<rabbit:listener ref="myListener02" method="handleJob" queue-names="myQueue" />
<rabbit:listener ref="myListener03" method="handleJob" queue-names="myQueue" />
<rabbit:listener ref="myListener04" method="handleJob" queue-names="myQueue" />
</rabbit:listener-container>
<!-- Bindings -->
<rabbit:direct-exchange name="directexchange" >
<rabbit:bindings>
<rabbit:binding queue="myQueue"/>
</rabbit:bindings>
</rabbit:direct-exchange>
当期望发送消息时(messagingTemplate.convertAndSend(“ / topic / greetings”,“ TEST”))什么也没有发生,但是如果我做同样的事情,但是在@Controller中,一切正常(消息通过websocket发送到浏览器)
我需要执行此操作,以便在作业完成时向用户发送通知。
经过多次测试,我更改了Rabbit配置文件,只剩下一个侦听器:
<!-- Listeners -->
<bean id="myListener01" class="com.xxx.MyJobListener" />
<rabbit:listener-container connection-factory="connectionFactory" error-handler="queueErrorHandler" >
<rabbit:listener ref="myListener01" method="handleJob" queue-names="myQueue" />
</rabbit:listener-container>
现在几乎可以随机使用了 很奇怪,但是每2个调用就可以了。 我的意思是,两次是,两次不是,两次是,两次不是...等等...这很奇怪。 我认为Rabbit配置有一些问题...
绝对是Spring Security配置。 如果禁用Spring Security,一切正常。 我将找出答案,然后在此处发布答案。
我能够解决。
问题不是Spring Security,问题是我两次声明了websocket消息代理:
<websocket:message-broker application-destination-prefix="/app" >
<websocket:stomp-endpoint path="/websocket" >
<websocket:sockjs />
</websocket:stomp-endpoint>
<websocket:simple-broker prefix="/topic,/user" />
</websocket:message-broker>
这些行位于我的websocket.xml
,并且由于沿.xml弹簧文件的“丑陋”导入语句分布,该文件已导入了多次。
在订购了这些导入并确保仅在一切正常后,才创建Bean。
可能会有所帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.