springboot+activeMQ入门(点对点)

359 阅读1分钟

1.pom.xml依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-activemq</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-pool</artifactId>
        </dependency>

2.配置文件

8161是activemq的管理页面,默认的账号密码都是admin 61616是程序连接activemq的通讯地址

spring:
 activemq:
    user: admin
    password: admin
    broker-url: tcp://localhost:61616
    pool:
      enabled: false
    packages:
      trust-all: true

3生产者

package cn.stylefeng.guns.modular.activeMQ.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.stereotype.Service;

import javax.jms.Destination;


/**
 * 生产者
 */
@Service("producer")
public class JMSProducer {
@Autowired
    private JmsMessagingTemplate jmsMessagingTemplate;

    public void sendMessage(Destination destination, final String msg){
        jmsMessagingTemplate.convertAndSend(destination,msg);
    }

    @JmsListener(destination = "out.queue")
    public void consumerMessage(String text){
        System.out.println("从out.queue队列收到回复为:"+text);
    }
}

4.消费者

消费者1

package cn.stylefeng.guns.modular.activeMQ.controller;

import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;

import javax.jms.JMSException;
import javax.jms.Session;
import javax.jms.TextMessage;

@Component
public class JMSConsumerOne {

    @JmsListener(destination = "mytest.queue")
    public void reveiveQueue(TextMessage msg, Session session){
        try {
            System.out.println("test-queue 消息:" + msg.getText());
        } catch (JMSException e) {
            e.printStackTrace();
        }
    }
}

消费者2

package cn.stylefeng.guns.modular.activeMQ.controller;

import org.springframework.jms.annotation.JmsListener;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.stereotype.Component;

@Component
public class JMSConsumerTwo {
    @JmsListener(destination = "mytest.queue")
    @SendTo("out.queue")//发送到out.queue队列,消息回馈
    public String receiveQueue(String text){
        System.out.println("Consumer2收到信息为:" + text);
        return "return message-" + text;
    }
}

5.测试类

package cn.stylefeng.guns.modular.activeMQ.controller;

import org.apache.activemq.command.ActiveMQQueue;
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 javax.jms.Destination;

@RestController
@RequestMapping("test")
public class TestController {
    @Autowired
    private JMSProducer producer;

    @GetMapping("queue")
    public String queueSend(){
        Destination destination = new ActiveMQQueue("mytest.queue");

        for (int i = 0; i < 5; i++) {
            producer.sendMessage(destination,"this is a queue test");
        }
        return "ok";
    }
}