当前位置:网站首页>ActiveMQ漫谈(一)
ActiveMQ漫谈(一)
2022-08-02 15:49:00 【Vainycos】
ActiveMQ的简单使用说明。
一.下载安装
前提:activemq需要依赖jre,所以提前下载安装配置好jdk。
访问官网activemq,选择对应系统进行下载(这里以Linux举例)
解压bin.tar.gz包
tar -xzvf activemq.bin.tar.gz
- 启动
cd apache-activemq-5.7.0/bin
./activemq start
- 查看启动状态
./activemq status
出现如下ActiveMQ is running关键词则说明已经启动成功
默认启动端口有两个,一个是web控制台端口8161,另一个是服务端口61616,并且服务连接的默认账号密码均为admin
web控制台访问界面:localhost:8161
二.集成SpringBoot
我们通过一个简单的生产/消费关系,建立mq的生产者和消费者加深印象
- 相关pom依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-pool</artifactId>
<version>5.12.1</version>
</dependency>
<!-- 非必须 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
- 配置文件
spring:
activemq:
#activeMQ的ip和端口号
broker-url: tcp://192.162.20.87:61616
#activeMq账号
user: admin
#activeMq密码
password: admin
# 队列名-支持自定义
queue-name: test
# 主题名-支持自定义
topic-name: test
pool:
# 连接池启动
enabled: true
# 最大连接数
max-connections: 10
- 消费者监听配置类
activemq比较特殊的一点是,它区分两种消费模式,对应也是两种生产模式,分别是queue和topic。
@EnableJms
@Configuration
public class ActiveMqConfig {
@Value("${spring.activemq.broker-url}")
private String brokerUrl;
@Value("${spring.activemq.user}")
private String userName;
@Value("${spring.activemq.password}")
private String password;
@Value("${spring.activemq.queue-name}")
private String queueName;
@Value("${spring.activemq.topic-name}")
private String topicName;
@Bean(name = "queue")
public Queue queue() {
return new ActiveMQQueue(queueName);
}
@Bean(name = "topic")
public Topic topic(){
return new ActiveMQTopic(topicName);
}
@Bean
public ConnectionFactory connectionFactory(){
return new ActiveMQConnectionFactory(userName, password, brokerUrl);
}
/** * 在Queue模式中,对消息的监听需要对containerFactory进行配置 * @param connectionFactory * @return */
@Bean("queueListener")
public JmsListenerContainerFactory<?> queueJmsListenerContainerFactory(ConnectionFactory connectionFactory){
SimpleJmsListenerContainerFactory factory = new SimpleJmsListenerContainerFactory();
factory.setConnectionFactory(connectionFactory);
factory.setPubSubDomain(false);
return factory;
}
/** * 在topic模式中,对消息的监听需要对containerFactory进行配置 * @param connectionFactory * @return */
@Bean("topicListener")
public JmsListenerContainerFactory<?> topicJmsListenerContainerFactory(ConnectionFactory connectionFactory){
SimpleJmsListenerContainerFactory factory = new SimpleJmsListenerContainerFactory();
factory.setConnectionFactory(connectionFactory);
factory.setPubSubDomain(true);
return factory;
}
}
- 消费者
@Component
public class ReportConsumerListener {
/** * queue模式的消费者 * @param msg */
@JmsListener(destination="${spring.activemq.queue-name}", containerFactory="queueListener")
public void queueConsumer(String msg) {
System.out.println("queue收到消息:" + msg);
}
/** * topic模式的消费者 * @param msg */
@JmsListener(destination = "${spring.activemq.topic-name}", containerFactory = "topicListener")
public void topicConsumer(String msg){
System.out.println("topic收到消息:" + msg);
}
}
- 生产者
为了模拟消费的情况,我们创建一组对应queue和topic模式的生产者来模拟生产
@RestController
@RequestMapping("/activemq")
public class ProducerController {
@Resource
private JmsMessagingTemplate jmsMessagingTemplate;
@Autowired
private Queue queue;
@Autowired
private Topic topic;
/** * queue模式mq消息发送 * @param msg * @return */
@GetMapping("/queue")
public String sendQueue(String msg) {
jmsMessagingTemplate.convertAndSend(queue, msg);
return "success, 发送消息:" + msg;
}
/** * topic模式一对多的消息队列的生产者 * @param msg */
@GetMapping("/topic")
public String sendMsgTopic(@RequestParam String msg){
jmsMessagingTemplate.convertAndSend(topic,msg);
return "success, 发送消息:" + msg;
}
}
测试queue模式:
curl -X “GET” “http://localhost:8080/activemq/queue?msg=测试消息”
控制台打印:queue收到消息:测试消息测试topic模式:
curl -X “GET” “http://localhost:8080/activemq/topic?msg=测试消息”
控制台打印:topic收到消息:测试消息
这个时候我们访问activemq控制台localhost:8161,在对应的topic/queue标签页下也能找到对应主题名的消费情况;
参考资料:
边栏推荐
猜你喜欢
随机推荐
Idea中运行sparkSQL
【学术相关】北大一研究生偷取同门师妹论文发表,作者却挂名给了武大 3 位不知情的学生......
Qt reads Json files (including source code + comments)
类的比较大小(Comparable -> compareTo(类自己实现接口),Comparator -> compare(新建一个类作为比较器))
11.1-CM24 最近公共祖先
一文搞懂│php 中的 DI 依赖注入
JZ4 二维数组中的查找
2.3 - P、V、S机制
看我如何用多线程,帮助运营小姐姐解决数据校对系统变慢!
禅道16.5升级17.3
QueryWrapper方法解释
JZ15 二进制中1的个数
Qt读取Json文件(含源码+注释)
JZ21 调整数组顺序使奇数位于偶数前面(一)-相对位置变化
[LeetCode]剑指 Offer 54. 二叉搜索树的第k大节点
JZ9 用两个栈实现队列
面试官:可以谈谈乐观锁和悲观锁吗
先睹为快!界面控件DevExpress WPF这些功能即将发布
SIGIR'22 推荐系统论文之序列推荐(长文)篇
浅聊组合函数