spring boot集成JMS

 本文主要写在spring boot下怎样实现JMS的queue 和 topic的消息的发送以及接受。

前序:(1)、安装ActiveMQ点击打开链接(2)、解压后启动activemq.bat文件(3)、登录http://127.0.0.1:8161/admin 管理界面**初始账号密码都是admin

(1)、创建spring boot项目,添加web 以及 activemq的依赖。

项目构建成功后的布局:


(2)创建生产者 producer

@Service("producer")
public class Producer {

    @Autowired
    private JmsMessagingTemplate jmsTemplate;

    /**消息生产者*/
    public void sendMessage(Destination destination, final String message){
        jmsTemplate.convertAndSend(destination, message);
    }

    /**
     * 接受从消费者哪里返回的消息
     * @param text
     */
    @JmsListener(destination = "out.queue")
    public void consumerMessage(String text){
        //System.out.println("从out.queue返回的消息是"+text);
    }
}

(3)构建消费者

@Component
public class Consumer {
    // 使用JmsListener配置消费者监听的队列,其中text是接收到的消息
    private static int count =1;
    /**
     * 消费者 使用jmslistener监听目标队列中是否有消息
     * @param text
     */
    @JmsListener(destination = "mytest.queue",containerFactory = "queueListenerFactory")
    public void receiveQueue(String text) {
        //System.out.println(Thread.currentThread().getName()+ " Consumer收到的queue 报文为:"+text);
    }

    /**
     * 接受topic的信息
     * @param text
     */
    @JmsListener(destination = "mytest.topic",containerFactory = "topicListenerFactory")
    public void receiveTopic(String text){
        System.out.println(Thread.currentThread().getName()+" Consumer收到的topic信息为:"+text+" ("+(count++)+")");
    }
}

(3)、构建测试类

@RunWith(SpringRunner.class)
@SpringBootTest
public class ActivemqApplicationTests {

	@Autowired
	private Producer producer;

	@Test
	public void contextLoads() {
		Destination queueDestination = new ActiveMQQueue("mytest.queue");
		Destination topicDestination1 =new ActiveMQTopic("mytest.topic");
		for(int i=0; i<10; i++){
			producer.sendMessage(queueDestination, "myname is queue!!!");
			producer.sendMessage(topicDestination1,"myName is topic!!!");
		}
	}

}

(4)、配置配置类(.properties文件)

spring.activemq.broker-url= tcp://localhost:61616
spring.activemq.in-memory= true  
# 如果此处设置为true,需要加如下的依赖包,否则会自动配置失败,报JmsMessagingTemplate注入失败
spring.activemq.pool.enabled= false  
# spring.jms.pub-sub-domain= true

(5)、此时启动只能启动queue,无法启动topic是由于JMS默认启动queue,如果想要启动topic需要将配置文件中spring.jms.pub-sub-domain=true放开,但是此时将仅仅启动topic,解决办法是将消费者使用不同的连接工厂类,并设置其pub-sub-domain属性,topic为true,queue为false即可。

(6)、添加配置类

@Configuration
@EnableJms
public class JmsConfig {

    @Bean
    public JmsListenerContainerFactory<?> topicListenerFactory(ConnectionFactory connectionFactory){
        DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
        factory.setPubSubDomain(true);
        factory.setConnectionFactory(connectionFactory);
        //factory.setTaskExecutor(Executors.newFixedThreadPool(10));
        //factory.setConcurrency("10");
        return factory;
    }
    @Bean
    public JmsListenerContainerFactory<?> queueListenerFactory(ConnectionFactory connectionFactory){
        DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
        factory.setPubSubDomain(false);
        factory.setConnectionFactory(connectionFactory);
        return factory;
    }
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值