ActiveMQ入门-ActiveMQ跟SpringBoot整合发送接收Topic

默认情况下@JmsListener不能监听topic,需要添加工厂类

package jms;

import org.apache.activemq.command.ActiveMQQueue;
import org.apache.activemq.command.ActiveMQTopic;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jms.annotation.EnableJms;
import org.springframework.jms.config.DefaultJmsListenerContainerFactory;
import org.springframework.jms.config.JmsListenerContainerFactory;

import javax.jms.ConnectionFactory;

@Configuration
@EnableJms //启用jms功能
public class ActiveMqConfig {

    //如果要使用topic类型的消息,则需要配置该bean
    @Bean("jmsTopicListenerContainerFactory")
    public JmsListenerContainerFactory jmsTopicListenerContainerFactory(
            ConnectionFactory connectionFactory
    ){
        DefaultJmsListenerContainerFactory factory
                = new DefaultJmsListenerContainerFactory();
        factory.setConnectionFactory(connectionFactory);
        factory.setPubSubDomain(true); //这里必须设置为true,false则表示是queue类型
        return factory;
    }


}
public void sendMessageTopic(ActiveMQTopic destination,String message) {
    jmsTemplate.convertAndSend(destination,"这是一个广播");
}
@JmsListener(destination = "mytest.topic",containerFactory = "jmsTopicListenerContainerFactory")
public void receiveToic(String text){
    System.out.println(text);
}
@Test
public void sendMessageTopic()throws  Exception{
    ActiveMQTopic destination = new ActiveMQTopic("mytest.topic");
    producer.sendMessageTopic(destination,"你好,ActiveMQ");
}

刚才出现了一个问题,在topic消费后也返回了一个提示信息,但是报错了

对于点对点消费者来说, 我可以给发送者回一条消息,告诉他我收到消息了,但是对于topic,发送者对接受者是否接受到消息不感兴趣,所以在发送者如果回送消息的时候会报错。

最后一个比较重要的知识点:对于queue来说,我们的消息发送出去,会一直保存在服务器上,等待消费者消费他,如果此时没有消费者在线,会一直等待,会把消息做持久化处理,保存在硬盘上,如果消费者上线,消费者就能监听到这条消息并进行消费。

对于topic来说,我一条消息发送出去,可能会有多个消费者去消费,如果这个时候消费者不在线,默认情况下,等消费者上线,他也无法收到这条消息,相当于这条消息丢失了。

也可以配置topic的持久化,保证消费者不在线的情况下,也能收到这条消息,那这跟queue的机制就类似了。

==特殊情况:如果消息发送失败怎么办?一直失败怎么办?==

==消息的重试机制,死信队列==

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值