若依前后端分离版本集成消息队列(ActiveMQ)
最终实现效果使用若依前后端分离版本项目,集成activeMQ队列模式,因为目前项目只需要用到队列模式来进行业务的解耦,没有使用到订阅,后续有机会再补充。
·
若依前后端分离版本集成消息队列(ActiveMQ)
文章目录
一、安装ActiveMQ?
安装环境
- 操作系统:Ubuntu 20.04.6 LTS
- ActiveMQ:5.12.0
安装步骤
1.打开终端并更新软件包列表:
sudo apt-get update
2.下载安装包:夸克网盘地址
3.上传到服务器指定文件夹下:/opt,运行命令解压:
tar -zxvf apache-activemq-5.12.0-bin.tar.gz
4.进入mq的bin文件夹下
cd apache-activemq-5.12.0/bin/
5.mq常用命令
./activemq start//启动mq,启动成功后访问http://xxxxxx:8161/admin/,默认用户名密码都是admin
./activemq stop:停止ActiveMQ服务器。
./activemq restart:重启ActiveMQ服务器。
./activemq status:检查ActiveMQ服务器的运行状态。
./activemq console:启动ActiveMQ的Web控制台。
./activemq browse:浏览消息队列中的消息。
./activemq purge:清空消息队列中的所有消息。
./activemq list:列出当前所有连接到ActiveMQ服务器的客户端。
./activemq query:查询关于ActiveMQ服务器的信息。
二、若依后端项目集成(队列模式)
1.POM依赖
在ruoyi-common模块下的pom新增依赖
<!-- ActiveMQ -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
2.项目配置
在ruoyi-common模块下的resources新建一个common.properties
:
# ActiveMQ connection properties
spring.activemq.broker-url=tcp://xxx.xxx.xxx.xxx:61616
spring.activemq.user=admin
spring.activemq.password=admin
3.生产者实现
新增发送消息工具类,并使用fastjson将对象转成json字符串发送
package com.ruoyi.common.utils.mqlistener;
import com.alibaba.fastjson.JSON;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.stereotype.Component;
@Component
public class ActiveMQUtils {
@Autowired
private JmsTemplate jmsTemplate;
// 发送消息到队列
public void sendMessageToQueue(String queueName, Object obj) {
String jsonStr= JSON.toJSONString(obj);
jmsTemplate.convertAndSend(queueName, jsonStr);
}
}
4.消费者实现
package com.ruoyi.util.mq;
import com.alibaba.fastjson.JSON;
import com.ruoyi.util.mq.entity.QueueDictionary;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;
@Component
public class TopicListner {
// 消息队列消费者监听
// 添加用户逻辑
@JmsListener(destination = QueueDictionary.ADD_USER)
public void addUser(String message) throws InterruptedException {
// TODO: 处理接收到的消息逻辑
System.out.println("队列原始消息: " + message);
Account account = JSON.parseObject(message, Account.class);
System.out.println("用户名: " + account.getName());
System.out.println("创建时间: " + account.getCreateTime());
// 业务处理
}
}
5.测试接口
package com.ruoyi.api.device;
import com.ruoyi.common.utils.mqlistener.ActiveMQUtils;
import com.ruoyi.util.mq.entity.QueueDictionary;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date;
@RestController
@RequestMapping(value = "/", produces = "application/json")
public class TestApiController {
@Autowired
ActiveMQUtils activeMQUtils;
@Autowired
AccountServiceImpl accountService;
@GetMapping(value = "/test")
public String test() {
Account account = new Account();
account.setId(123241L);
account.setName("张三");
account.setCreateTime(new Date());
accountService.insertAccount(account);
activeMQUtils.sendMessageToQueue(QueueDictionary.ADD_USER, account);
return "1";
}
}
总结
最终实现效果使用若依前后端分离版本项目,集成activeMQ队列模式,因为目前项目只需要用到队列模式来进行业务的解耦,没有使用到订阅,后续有机会再补充。
更多推荐
已为社区贡献1条内容
所有评论(0)