SpringBoot 整合activeMq

本文介绍了如何在SpringBoot项目中整合ActiveMQ,包括添加Pom依赖、ActiveMQ的安装与配置、环境变量设置、启动与停止服务、管理页面访问、端口修改以及在application.properties中配置生产者和消费者。通过具体的步骤,展示了如何创建和测试消息传递功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Pom依赖:

<dependency>
        <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
 <!-- 整合acriveMq-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-activemq</artifactId>
        </dependency>

  1. 下载ActiveMq 安装包:

http://activemq.apache.org/download.html


  1. 解压安装包
tar -zxvf apache-activemq-5.15.8-bin.tar.gz 

  1. 配置环境变量:vim /etc/profile
export ACTIVEMQ_HOME=/usr/local/apache-activemq-5.13.3
export ACTIVEMQ_BIN=$ACTIVEMQ_HOME/bin
export PATH=${PATH}:${ACTIVEMQ_BIN}

保存文件,配置立即生效:
source /etc/profile


  1. 启动和停止ActiveMQ
./activemq start  #启动 
./activemq stop  #停止

  1. 访问ActiveMQ
    http://191.168.203.137:8161/admin/,默认账户和密码为,admin/admin
    在这里插入图片描述
  • 修改activeMQ 的端口号
    进入activeMQ 的conf 目录:
#编辑activeMQ 配置文件
vim activemq.xml 

查找transportConnectors:
找到name=“openwire” uri="tcp://0.在这里插入图片描述
修改端口号即可:


  • 修改管理页面的8161端口:
    修改jetty.xml,修改内容容器jetty的默认启动端口,找到默认的8161后修改
    在这里插入图片描述
  • application.properties 文件
#整合ActiveMQ
spring.activemq.broker-url=tcp://192.168.203.137:61616
spring.activemq.in-memory=true
spring.activemq.password=admin
spring.activemq.user=admin
#如果此处设置为true 需要加下面的依赖包,否则会自动配置失败,JmsMessagingTemplate
spring.activemq.pool.enabled=false
  • 定义生产者:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.stereotype.Component;

import javax.jms.Destination;
import java.util.Map;

/**
 * @author Donald
 * @create 2019-01-27 22:23
 */
@Component
public class Produce {

    @Autowired
    private JmsMessagingTemplate jmsMessagingTemplate;

    //发送 消息
    public void sendMessage(Destination des, String message){
        jmsMessagingTemplate.convertAndSend(des,message);
    }

    //发送复杂对象尝试
    public void sendPOJO(Destination des, Map<String, String> map){
        jmsMessagingTemplate.convertAndSend(des,map);
    }
}
  • 定义消费者:
package com.feifan.activemq;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.feifan.vo.User;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;

import java.io.IOException;
import java.util.Map;

/**
 * @author Donald
 * @create 2019-01-27 22:27
 */
@Component
public class consumer {

    private static final Logger LOGGER  = LoggerFactory.getLogger(consumer.class);

    @JmsListener(destination = "myqueue")//时时刻刻监听消息队列,目的地名称额
    public void receviceMsg(String text){
        try {
            Thread.sleep(500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        LOGGER.info("message:{}<<<<<<<:{}",text,Thread.currentThread().getName());
    }

    @JmsListener(destination = "myqueue")//时时刻刻监听消息队列,目的地名称额
    public void receviceMsg2(String text){
        try {
            Thread.sleep(500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        LOGGER.info("message:{}>>>>>>>:2{}",text,Thread.currentThread().getName());
    }

    @Autowired
    private ObjectMapper objectMapper;

    @JmsListener(destination = "POJO")
    public void getUser(Map<String,String> map){
        LOGGER.info("{}",map);
        for (Map.Entry<String,String> entry:map.entrySet()) {
            try {
                User user = objectMapper.readValue(entry.getValue(), User.class);
                LOGGER.info("{}",user);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

  • 测试控制层类:
 @Autowired
    private Produce produce;

    @ResponseBody
    @RequestMapping("activeMQ")
    public String activeMQ(){
        //点对点消息 1:1
        Destination des =new ActiveMQQueue("myqueue");//指定存放消息队列的名称
        for(int i=0;i<50;i++){
            produce.sendMessage(des,"你是哪个呦"+i);
        }
        return "OK produce message";
    }

    @Autowired
    private ObjectMapper objectMapper;

    @ResponseBody
    @RequestMapping("activeMQP")
    public String activeMQP(){
        //复杂对象一对一消息机制
        Destination destination =  new ActiveMQQueue("POJO");//指定消息对列的名称
        User user = null;
        Map<String,String> map = new HashMap<>();
        for (int i = 0; i < 50; i++) {
            user = new User();
            user.setId(i);
            user.setUsername(String.valueOf(i));
            user.setBrithday(new Date());
            user.setAge(i);
            user.setEmail(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
            try {
                map.put(String.valueOf(i),objectMapper.writeValueAsString(user));
            } catch (JsonProcessingException e) {
                e.printStackTrace();
            }
            produce.sendPOJO(destination,map);
        }
        return "ActiveMQ 发送 消息对列正确";
    }

直接对象传值有待后期验证:》》》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值