springboot整合activemq

本文详细介绍使用Spring Boot整合ActiveMQ消息队列的过程,包括单向与双向消息传递的实现方式,涵盖text与map类型消息的生产和消费示例。

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

一、单向消息text

  1. 配置文件
activemq:
    broker-url: tcp://127.0.0.1:61616
    user: admin
    password: admin
queue: ghmq
outqueue: outmq
  1. pom文件
<!-- 整合消息队列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>
  1. 生产者
import com.xydtech.api.config.ResultStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.stereotype.Service;
import org.springframework.jms.annotation.JmsListener;

import java.util.HashMap;
import java.util.Map;

/***
 * 功能描述:  生产者  <br/>
 * 创建时间:  2020/7/30 8:44
 *@Methodname
 *@Param
 *@Return
 * @author  whkj
 */
@Service
public class ProuductService {

   @Autowired
   private JmsMessagingTemplate jmsMessagingTemplate;

   @Value("${queue}")
   private String queueName;

   public void sendQueue(Map<String, Object> msg){
       jmsMessagingTemplate.convertAndSend(queueName,msg);

   }
}
  1. 消费者


import com.xydtech.api.config.ResultStatus;
import lombok.extern.slf4j.Slf4j;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.stereotype.Component;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
import java.util.HashMap;
import java.util.Map;

/***
 * 功能描述:   消费者 <br/>
 * 创建时间:  2020/7/30 8:44
 *@Methodname
 *@Param
 *@Return
 * @author  whkj
 */

@Slf4j
@Component
public class CreditLogicService implements MessageListener {


    @JmsListener(destination = "${queue}")
    @Override
    public void onMessage(Message message) {
        log.info("-----------消息接收器监听器----------");
        TextMessage textMessage = (TextMessage) message;
        try {
            String text = textMessage.getText();
            log.info("监听器接受到的消息为:"+text);
        } catch (JMSException e) {
            e.printStackTrace();
        }
    }

}

  1. 调用

import com.xydtech.api.authorization.annotation.Authorization;
import com.xydtech.api.config.ResultStatus;
import com.xydtech.api.service.impl.ProuductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.annotation.EnableJms;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.time.Instant;
import java.util.HashMap;
import java.util.Map;


/***
 * 功能描述:  调用消息  <br/>
 * 创建时间:  2020/7/30 8:44
 *@Methodname
 *@Param
 *@Return
 * @author  whkj
 */
@RestController

public class ActivemqController {
    
    private final ProuductService prouduct;

    @Autowired
    public ActivemqController(ProuductService prouduct) {
        this.prouduct = prouduct;
    }

    @GetMapping("/send")

    @Authorization(onlyGetCustomer = true)
    public void sendQueue(String msg){
        for(int i=0; i<10; i++){
            System.out.println(i);
            System.out.println(Instant.now().toString());
            prouduct.sendQueue(msg);
                   }
        System.out.println(Instant.now().toString());
        prouduct.sendQueue(msg);

    }
  1. 结果

二、双向消息text

  1. pom文件
    同上
  2. 生产者
import com.xydtech.api.config.ResultStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.stereotype.Service;
import org.springframework.jms.annotation.JmsListener;

import java.util.HashMap;
import java.util.Map;

/***
 * 功能描述:  生产者  <br/>
 * 创建时间:  2020/7/30 8:44
 *@Methodname
 *@Param
 *@Return
 * @author  whkj
 */
@Service
public class ProuductService {

   @Autowired
   private JmsMessagingTemplate jmsMessagingTemplate;

   @Value("${queue}")
   private String queueName;

   public void sendQueue(Map<String, Object> msg){
       jmsMessagingTemplate.convertAndSend(queueName,msg);

   }
   @JmsListener(destination="${outqueue}")//实现双向队列
   public void consumerMessage(String text){
      //System.out.println("从out.queue队列收到的回复报文为:"+text);
   }

   

}
  1. 消费者
import com.xydtech.api.config.ResultStatus;
import lombok.extern.slf4j.Slf4j;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.stereotype.Component;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
import java.util.HashMap;
import java.util.Map;

/***
 * 功能描述:   消费者 <br/>
 * 创建时间:  2020/7/30 8:44
 *@Methodname
 *@Param
 *@Return
 * @author  whkj
 */

@Slf4j
@Component
public class CreditLogicService implements MessageListener {


    @JmsListener(destination = "${queue}")
    @Override
    public void onMessage(Message message) {
        log.info("-----------消息接收器监听器----------");
        TextMessage textMessage = (TextMessage) message;
        try {
            String text = textMessage.getText();
            log.info("监听器接受到的消息为:"+text);
        } catch (JMSException e) {
            e.printStackTrace();
        }
    }

    @JmsListener(destination = "${queue}")
    @SendTo("${outqueue}")
    public String receiveQueue(Message message) {
    //log.info("-----------消息接收器监听器----------");
    System.out.println(message+"diyi");
    String text="";
        TextMessage textMessage = (TextMessage) message;
          System.out.println(textMessage+"第二");
        try {
             text = textMessage.getText();
            //log.info("监听器接受到的消息为:"+text);
        } catch (JMSException e) {
            e.printStackTrace();
        }
        //System.out.println("消费者收到的报文为:"+text);
        return "return message"+text;
    }

}

  1. 调用
    同上
  2. 结果

三、单向消息map

  1. pom文件
    同上
  2. 生产者
import com.xydtech.api.config.ResultStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.stereotype.Service;
import org.springframework.jms.annotation.JmsListener;

import java.util.HashMap;
import java.util.Map;

/***
 * 功能描述:  生产者  <br/>
 * 创建时间:  2020/7/30 8:44
 *@Methodname
 *@Param
 *@Return
 * @author  whkj
 */
@Service
public class ProuductService {

   @Autowired
   private JmsMessagingTemplate jmsMessagingTemplate;

   @Value("${queue}")
   private String queueName;

   public void sendQueue(Map<String, Object> msg){
       jmsMessagingTemplate.convertAndSend(queueName,msg);

   }
  
}

  1. 消费者
import com.xydtech.api.config.ResultStatus;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.stereotype.Component;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
import java.util.HashMap;
import java.util.Map;

/***
 * 功能描述:   消费者 <br/>
 * 创建时间:  2020/7/30 8:44
 *@Methodname
 *@Param
 *@Return
 * @author  whkj
 */

@Slf4j
@Component
public class CreditLogicService {
    @JmsListener(destination = "${queue}")
    public void readMap(Map map) {
       
        log.info("-----------消息接收器监听器----------");
        System.out.println(map);
        
    }

}

  1. 调用
import com.xydtech.api.authorization.annotation.Authorization;
import com.xydtech.api.config.ResultStatus;
import com.xydtech.api.service.impl.ProuductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.annotation.EnableJms;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.time.Instant;
import java.util.HashMap;
import java.util.Map;


/***
 * 功能描述:  调用消息  <br/>
 * 创建时间:  2020/7/30 8:44
 *@Methodname
 *@Param
 *@Return
 * @author  whkj
 */
@RestController

public class ActivemqController {

    private final ProuductService prouduct;

    @Autowired
    public ActivemqController(ProuductService prouduct) {
        this.prouduct = prouduct;
    }

    @GetMapping("/send")

    @Authorization(onlyGetCustomer = true)
    public void sendQueue(String msg){
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("msg",msg);
        map.put("code",ResultStatus.SUCCESS.getCode());
        System.out.println(Instant.now().toString());
        prouduct.sendQueue(map);

    }
}

  1. 结果

四、双向消息map

  1. pom文件
    同上
  2. 生产者
import com.xydtech.api.config.ResultStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.stereotype.Service;
import org.springframework.jms.annotation.JmsListener;

import java.util.HashMap;
import java.util.Map;

/***
 * 功能描述:  生产者  <br/>
 * 创建时间:  2020/7/30 8:44
 *@Methodname
 *@Param
 *@Return
 * @author  whkj
 */
@Service
public class ProuductService {

   @Autowired
   private JmsMessagingTemplate jmsMessagingTemplate;

   @Value("${queue}")
   private String queueName;

   public void sendQueue(Map<String, Object> msg){
       jmsMessagingTemplate.convertAndSend(queueName,msg);

   }
   
    @JmsListener(destination="${outqueue}")//实现双向队列
    public void readMap(Map map) {
        System.out.println("从out.queue队列收到的回复报文为:"+map);

    }

}

  1. 消费者

import com.xydtech.api.config.ResultStatus;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.stereotype.Component;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
import java.util.HashMap;
import java.util.Map;

/***
 * 功能描述:   消费者 <br/>
 * 创建时间:  2020/7/30 8:44
 *@Methodname
 *@Param
 *@Return
 * @author  whkj
 */

@Slf4j
@Component
public class CreditLogicService {
    @JmsListener(destination = "${queue}")
    @SendTo("${outqueue}")
    public Map<String, Object> readMap(Map map) {
        Map<String, Object> remap = new HashMap<String, Object>();
        log.info("-----------消息接收器监听器----------");
        System.out.println(map);
        remap.put("code",ResultStatus.SUCCESS.getCode());
        return remap;

    }

}

  1. 调用
    同上
  2. 结果
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值