ActiveMQ是Apache所提供的一个开源的消息系统,完全采用Java来实现,支持J2EE提出的JMS(Java Message Service,即Java消息服务)规范。
下载ActiveMQ:https://activemq.apache.org/components/classic/download/
下载后解压,进入bin文件夹
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL1kEVOBTV61UMNpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLwEDO0MTN1EjMxADOwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
根据windows系统的位数,进入win32或win64, 本机系统是64位,选择win64
双击activemq.bat
启动成功!
访问:http://localhost:8161/admin/ 登录用户/密码默认是admin/admin
代码:
<!-- activemq -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-pool</artifactId>
</dependency>
<dependency>
<groupId>org.messaginghub</groupId>
<artifactId>pooled-jms</artifactId>
<version>1.0.3</version>
</dependency>
</dependencies>
简单案例实现activeMQ的队列和订阅模式
MQ的配置 :
@Configuration
@EnableJms // 启用jms功能
public class ActiveMqConfig {
//队列模式
@Bean("jmsQueueListenerContainerFactory")
public JmsListenerContainerFactory jmsQueueListenerContainerFactory(ConnectionFactory connectionFactory) {
DefaultJmsListenerContainerFactory factory =
new DefaultJmsListenerContainerFactory();
factory.setConnectionFactory(connectionFactory);
factory.setPubSubDomain(false); // 这里必须设置为true,false则表示是queue类型
return factory;
}
//订阅模式
@Bean("jmsTopicListenerContainerFactory")
public JmsListenerContainerFactory jmsTopicListenerContainerFactory(ConnectionFactory connectionFactory) {
DefaultJmsListenerContainerFactory factory =
new DefaultJmsListenerContainerFactory();
factory.setConnectionFactory(connectionFactory);
//重连间隔时间
factory.setPubSubDomain(true);
return factory;
}
}
@RestController
public class QueueController {
@Autowired
private JmsMessagingTemplate jmsTemplate;
@GetMapping("/queue")
public void jmsQueueTemplate(@RequestParam String value) {
Destination destination = new ActiveMQQueue("queue_test");
this.jmsTemplate.convertAndSend(destination, value);
}
@GetMapping("/topic")
public void jmsTopicTemplate(@RequestParam String value) {
Destination destination = new ActiveMQTopic("topic_test");
this.jmsTemplate.convertAndSend(destination, value);
}
}
队列监听
@Component
public class QueueReceiver {
@JmsListener(destination = "queue_test", containerFactory = "jmsQueueListenerContainerFactory")
public void receive(String msg) {
System.out.println("队列监听到的消息内容为: " + msg);
}
}
订阅监听
@Component
public class TopicReceiver {
@JmsListener(destination = "topic_test", containerFactory = "jmsTopicListenerContainerFactory")
public void receive(String msg) {
System.out.println("topicTest1 监听到的消息内容为: " + msg);
}
@JmsListener(destination = "topic_test", containerFactory = "jmsTopicListenerContainerFactory")
public void receive2(String msg) {
System.out.println("topicTest2 监听到的消息内容为: " + msg);
}
}
测试:
参考:https://blog.csdn.net/ansellyy/article/details/81044320
https://blog.csdn.net/lemonTree_DXP/article/details/81334812
https://www.jianshu.com/p/8b9bfe865e38