若依前后端分离版本集成消息队列(ActiveMQ)



一、安装ActiveMQ?

安装环境

  1. 操作系统:Ubuntu 20.04.6 LTS
  2. 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队列模式,因为目前项目只需要用到队列模式来进行业务的解耦,没有使用到订阅,后续有机会再补充。

Logo

快速构建 Web 应用程序

更多推荐