簡體   English   中英

收件人沒有收到來自主題的消息

[英]Receiver doesn't receive messages from topic

我有兩個不同的發送者和接收者應用程序。

發件人:

@SpringBootApplication
public class RabbitJmsApplication implements CommandLineRunner {

    public static void main(String[] args) {
        SpringApplication.run(RabbitJmsApplication.class, args);
    }

    @Autowired
    private JmsTemplate template;
    @Autowired
    private JmsTemplate topicTemplate;

    @Override
    public void run(String... arg0) throws Exception {
        for (int i = 0; i < 10; i++) {
            template.convertAndSend("my_queue", "msg_" + i);
            Thread.sleep(100);
        }
        for (int i = 0; i < 10; i++) {
            topicTemplate.convertAndSend("my_topic", "topic_msg_" + i);
            Thread.sleep(100);
        }
    }

    @Bean
    public RMQConnectionFactory connectionFactory() {
        return new RMQConnectionFactory();
    }

    @Bean
    public JmsTemplate template() {
        return new JmsTemplate(connectionFactory());
    }

    @Bean
    public JmsTemplate topicTemplate() {
        final JmsTemplate jmsTemplate = new JmsTemplate(connectionFactory());
        jmsTemplate.setPubSubDomain(true);
        return jmsTemplate;
    }
}

和接收者:

@Component
public class Listener {

    @JmsListener(destination = "my_queue")
    public void receive(String str){
        System.out.println(str);
    }
    @JmsListener(destination = "my_topic")
    public void receiveTopic(String str){
        System.out.println(str);
    }
}

我懂了

msg_1
msg_2
...

在接收器上,但看不到主題消息。

我究竟做錯了什么?

PS

管理控制台:

在此處輸入圖片說明

在此處輸入圖片說明 在此處輸入圖片說明

在此處輸入圖片說明

在此處輸入圖片說明

在此處輸入圖片說明

默認情況下,對主題的訂閱不是持久性的-您可能在啟動偵聽器之前發送消息。

在將消息發送到主題之前,請嘗試添加Thread.sleep()

將以下bean添加到上下文后,我的接收器開始接收消息:

    @Bean
    public JmsListenerContainerFactory<?> myFactory(DefaultJmsListenerContainerFactoryConfigurer configurer) {
        DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
        // This provides all boot's default to this factory, including the message converter
        configurer.configure(factory, connectionFactory());
        // You could still override some of Boot's default if necessary.
        factory.setPubSubDomain(true);
        return factory;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM