消息队列最近没有使用到,不过还是忍不住研究了一下。

springboot整合ActiveMQ

1. docker部署ActiveMQ

1.1 搜索ActiveMQ

docker search activemq

image.png

1.2 下载ActiveMQ的镜像

docker pull webcenter/activemq

image.png

1.3 启动ActiveMQ的镜像

docker run -it -d \ # 后台运行
-p 61616:61616 \ # java用的tcp端口
-p 8161:8161 \ # 后台管理系统端口
--name myactivemq \ # 别名
webcenter/activemq # 镜像名称(现在意味着laster)

image.png

1.4 打开后台管理界面进行查看

后台访问地址就是:你的ip地址:8161
image.png

2. 使用springboot搭建消息提供者

2.1 pom.xml的配置

新建一个sprinboot的项目,然后在pom.xml文件中添加activemq的依赖。

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

2.2 application.yml配置信息的添加

server:
  port: 8080 # 端口号
spring:
  activemq:
    broker-url: tcp://172.22.11.231:61616 # 自己的MQ服务器地址,用自己的
  jms:
    pub-sub-domain: false # false = Queue true = Topic

# 自己定义的队列名称
myqueue: boot-activemq-queue

2.3 启动类上配置@EnableJms注解

@SpringBootApplication  
@EnableJms  
public class Activemq1Application {  
  
    public static void main(String[] args) {  
        SpringApplication.run(Activemq1Application.class, args);  
  }  
  
}

2.4 创建消息提供者(provider)

import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import javax.jms.Queue;

/**
 * @author 10166815
 */
@RestController
public class ProviderController {

    /**
     * 获取配置文件中的队列名称
     */
    @Value("${myqueue}")  
    private String myqueue;

    /**
     * 注入springboot封装的工具类
     */
    @Resource  
    private JmsMessagingTemplate jmsTemplate;

    @RequestMapping("send")
    public void send(String name) {
        jmsTemplate.convertAndSend(myqueue, name);
    }

}

2.5 启动项目,用postman进行测试即可

现在进入控制界面查看Queue会发现并没有任何消息
image.png
打开postman输入地址,配置参数进行访问:
image.png
再次查看Queue之后会发现出现了一个消息:
image.png

3. 使用springboot搭建消费者

可新建一个springboot的项目用来做消费者

3.1 pom.xml的配置

新建一个sprinboot的项目,然后在pom.xml文件中添加activemq的依赖。

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

3.2 application.yml配置信息的添加

server:
  port: 8081 # 端口号
spring:
  activemq:
    broker-url: tcp://172.22.11.231:61616 # 自己的MQ服务器地址,用自己的
  jms:
    pub-sub-domain: false # false = Queue true = Topic

# 自己定义的队列名称
myqueue: boot-activemq-queue

3.3 创建消费者

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

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

/**
 * @author 10166815
 */
@Component
public class ConsumerController {

    /**
     * 使用JmsListener配置消费者监听的队列,其中name是接收到的消息
     * @param textMessage
     * @return
     */
     @JmsListener(destination = "${myqueue}")  
    public void handleMessage(String message) {  
        System.out.println("成功接受name: " + message);  
    }

}

3.4 启动项目,查看控制台是否将信息输出

控制台打印出消息
image.png
控制页面也显示该消息被处理
image.png

至此,springboot简单整合ActiveMQ就结束了。


周兆东
107 声望21 粉丝

一个java小白的成长之路。。。