1、pom文件中引入activemq的依赖(这里使用的sprinboot版本是2.1.3.Release)
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-activemq</artifactId> </dependency>
2、在application.yml或者application.properties中配置activemq相关信息
#配置activemq spring: activemq: #activemq的url broker-url: tcp://192.168.24.130:61616 #用户名 user: admin #密码 password: 445221abcd #是否使用线程池 pool: enabled: false #是否信任所有包 packages: trust-all: true #默认情况下,activemq使用的是queue模式,如果要使用topic模式,必须设置为true jms: pub-sub-domain: false
3、在主启动类中启用Jms
@EnableJms @SpringBootApplication public class SpringbootActivemqDemoApplication { public static void main(String[] args) { SpringApplication.run(SpringbootActivemqDemoApplication.class, args); } }
4、编写配置类,实现程序能同时监听queue或topic
@Configuration public class ActivemqConfig { /** * 实现监听queue * * @param connectionFactory * @return */ @Bean public JmsListenerContainerFactory<?> queueContainerFactory(ConnectionFactory connectionFactory){ DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory(); factory.setConnectionFactory(connectionFactory); factory.setPubSubDomain(false); return factory; } /** * 实现监听topic * * @param connectionFactory * @return */ @Bean public JmsListenerContainerFactory<?> topicContainerFactory(ConnectionFactory connectionFactory){ DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory(); factory.setConnectionFactory(connectionFactory); factory.setPubSubDomain(true); return factory; } }
5、编写消息生产者与消息消费者
@Service public class ProducerServiceImpl implements ProducerService { @Autowired private JmsMessagingTemplate jmsMessagingTemplate; /** * 将User对象转换成Message对象,并发送到queue或者topic * * @param destination * @param user * @return */ @Override public boolean produce(Destination destination, User user) { jmsMessagingTemplate.convertAndSend(destination, user); return true; } }
@Service public class ConsumerServiceImpl implements ConsumerService { @Override @JmsListener(destination = "item.queue",containerFactory = "queueContainerFactory") public void consumeQueue(User user) { System.out.println(user.toString()); } @Override @JmsListener(destination = "chen.topic",containerFactory = "topicContainerFactory") public void consumeTopic(User user) { System.out.println(user.toString()); } }
6、进行测试,这里就略了,直接在test类中注入消息生产者与消费者进行测试即可
PS:这里只是简单的整合使用而已,具体源码分析有空再发出来,有错误的地方还望各位帮忙指出