Rabbitmq Java Spring Stomp AMQP

Rabbitmq Java Spring Stomp AMQP,rabbitmq,spring-amqp,stomp,sockjs,Rabbitmq,Spring Amqp,Stomp,Sockjs,我有三个项目: Javascript SockJS STOMP客户端 Spring boot STOMP端点和AMQP 用于测试的Spring boot AMQP(RabbitListener)客户端 我正在使用RabbitMQ message broker(+Stomp插件),并正常配置了amqp和Stomp端点。当我将消息发送到队列,并使用RabbitTemplate和第三个项目(用于测试的spring boot amqp客户端)正常订阅此消息时,一切正常!!但是Javascript S

我有三个项目:

  • Javascript SockJS STOMP客户端

  • Spring boot STOMP端点和AMQP

  • 用于测试的Spring boot AMQP(RabbitListener)客户端

    我正在使用RabbitMQ message broker(+Stomp插件),并正常配置了amqpStomp端点。当我将消息发送到队列,并使用RabbitTemplate和第三个项目(用于测试的spring boot amqp客户端)正常订阅此消息时,一切正常!!但是Javascript STOMP客户端没有收到此消息。。 另外,当我用SimpMessagingTemplate发送消息时,JS客户端接收到的消息很好

  • Javascript SockJS STOMP客户端

            var socket = new SockJS('http://localhost:8090/hello');
            stompClient = Stomp.over(socket);
            stompClient.connect('guest','guest', function(frame) {
                setConnected(true);
                console.log('Connected: ' + frame);
                stompClient.subscribe('/topic/testqueue', function(greeting){
                    showGreeting(JSON.parse(greeting.body).content);
                });
            });
    
    spring boot STOMP端点和AMQP

        @Controller
        public class SampleController {
            Logger logger = Logger.getLogger(SampleController.class);
        
            @Autowired
            private RabbitTemplate rabbitTemplate;
        
            private SimpMessagingTemplate messagingTemplate;
        
            @Autowired
            public SampleController(SimpMessagingTemplate messagingTemplate) {
                this.messagingTemplate = messagingTemplate;
            }
        
            @GetMapping("/emit/{message}")
            @ResponseBody
            String queue1(@PathVariable("message") String message) throws Exception {
                logger.info("Emit to testqueue");
                rabbitTemplate.convertAndSend("/topic/testqueue", new Greeting("Salam olsun " + message));
                Thread.sleep(60000); // simulated delay
                return "Emit to testqueue";
            }
    }
    
    用于测试的spring boot amqp客户端

    @Component
    public class RabbitMqListener {
        Logger logger = Logger.getLogger(RabbitMqListener.class);
    
        @RabbitListener(queues = "/topic/testqueue")
        public void processQueue1(String message) {
            logger.info("Received from queue : " + message);
        }
    }
    

    如何在RabbitMQ中混合使用amqp和stomp协议?我想用amqp协议(RabbitTemplate)从另一个项目发送消息,并从JS STOMP客户端(SockJS)接收此消息。。谢谢。

    我被
    rabbitmplate.convertAndSend(“/topic/testqueue”,…)
    改为
    rabbitmplate.convertAndSend(“amq.topic”,“testqueue”…)
    ,而且一切都很好)),特别感谢Artem Bilan的支持。祝你好运

    你确定你的应用程序配置中有一个
    enableStomBrokerRelay()
    :当然。。我使用EnableStompBrokerReay实现了RabbitMQ。(主机、端口、用户名、密码)您是否有机会在GitHub上与我们分享一些简单的项目,让我们使用它并重现您的担忧?如果有一些自述文件以及如何复制的说明也会很好。请尝试找出混合使用AMQP和STOMP协议时缺少的内容:。尤其要注意
    对于发送帧,消息将使用路由键发送到amq.topic交换。
    。因此,您的
    rabbitmplate.convertAndSend(“/topic/testqueue”,…)
    听起来不太正确。感谢Artem,我将rabbitmplate.convertAndSend(“/topic/testqueue”,…)更改为rabbitmplate.convertAndSend(“amqp.topic”,“testqueue”…),并且一切正常)