SpringBoot+ActiveMQ

SpringBoot+ActiveMQ 简单整合,下文只是对两者最最最基本的使用。

官网:http://activemq.apache.org/

1、版本介绍

  1.1、SpringBoot:2.1.2
  1.2、Maven:3.6.1
  1.3、开发工具:IDEA 2019.3
  1.4、ActiveMQ:5.15.2

2、ActiveMQ简介

  2.1、MQ是消息中间件,是一种在分布式系统中应用程序借以传递消息的媒介,常用的有ActiveMQ,RabbitMQ,kafka。ActiveMQ是Apache下的开源项目,完全支持JMS1.1和J2EE1.4规范的JMS Provider实现
  2.2、Apache ActiveMQ是Apache软件基金会所研发的开放源代码消息中间件;由于ActiveMQ是一个纯Java程序,因此只需要操作系统支持Java虚拟机,ActiveMQ便可执行
  2.3、JMS:JMS,即Java Message Service,通过面向消息中间件(MOM:Message Oriented Middleware)的方式很好的解决了上面的问题。大致的过程是这样的:发送者把消息发送给消息服务器,消息服务器将消息存放在若干队列/主题中,在合适的      
            时候,消息服务器会将消息转发给接受者。在这个过程中,发送和接受是异步的,也就是发送无需等待,而且发送者和接受者的生命周期也没有必然关系;在pub/sub模式下,也可以完成一对多的通信,即让一个消息有多个接受者

3、ActiveMQ安装

3.1、windows安装直接下载、解压、运行即可
3.2、Linux 基于docker 安装
// search镜像:
docker search activemq
// pull 镜像  
docker pull webcenter/activemq
注意:下面端口可自动调整
//61616是 activemq 的容器使用端口(映射为61617)
//8161是 web 页面管理端口(对外映射为8162)
// run 
docker run -d --name activemq -p 61617:61616 -p 8162:8161 webcenter/activemq

3.3、安装成功后访问:http://ip:8161/admin,出现如下页面表示安装成功,默认登录user/password是admin/admin

4、工程搭建

4.1、新建SpringBoot-ActiveMQ-provider 工程

yml配置文件:

server:
  port: 8999

spring:
  application:
    name: ActiveMQ-provider
  activemq:
    broker-url: tcp://xxx.xxx.xxx.xxx:61616
    user: admin
    password: admin
    in-memory: true
    pool:
      enabled: true
pom依赖:

<dependencies>
        <!--消息队列-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-activemq</artifactId>
        </dependency>
        <!--消息队列连接池-->
        <dependency>
            <groupId>org.messaginghub</groupId>
            <artifactId>pooled-jms</artifactId>
        </dependency>

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

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>
新建配置类:

import org.apache.activemq.command.ActiveMQQueue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.jms.Queue;

/**
 * ClassName:ActivemqConfig
 * Describe:
 * Author:DGJ
 * Data:2020/10/27 14:13
 */
@Configuration
public class ActivemqConfig {
    @Bean
    public Queue GetQueue(){
        //TestQueue 队列名称
        return new ActiveMQQueue("TestQueue");
    }
}
controller:


import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.jms.Queue;

/**
 * ClassName:ProviderController
 * Describe:
 * Author:DGJ
 * Data:2020/10/27 14:14
 */
@Slf4j
@RestController
public class ProviderController {

    @Autowired
    private Queue queue;

    @Autowired
    private JmsTemplate jmsTemplate;

    @Autowired
    private JmsMessagingTemplate jmsMessagingTemplate;

    @PostMapping(value = "/sendmessage")
    public String SendMessage(String name){
        jmsMessagingTemplate.convertAndSend(queue, name);
        return "ok";
    }
}
主启动:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.jms.annotation.EnableJms;

/**
 * ClassName:ActiveMqProviderApplication
 * Describe:
 * Author:DGJ
 * Data:2020/10/27 14:08
 */
@SpringBootApplication
@EnableJms
public class ActiveMqProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(ActiveMqProviderApplication.class,args);
    }
}

​ 至此,mq的provider搭建完成。

4.2、测试

post请求:

http://localhost:8999/sendmessage?name=TestSms

登录MQ控制台:

4.3搭建SpringBoot-ActiveMQ-Customer工程

yaml(只需要改port和name即可) 、pom、主启动类都一样
    
customer接收消息类:
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.stereotype.Component;

/**
 * ClassName:ConsumerService
 * Describe:
 * Author:DGJ
 * Data:2020/10/27 14:37
 */
@Component
@Slf4j
public class ConsumerService {

    @Autowired
    private JmsMessagingTemplate jmsMessagingTemplate;

    @JmsListener(destination = "TestQueue")
    public void RecMsg(String msg){
        log.error("接收消息:"+msg);
    }
}

4.4、测试

post http://localhost:8999/sendmessage?name=TestSms
日志打印

MQ控制台

工程结构图

5、activMQ 控制台使用

  没什么好说的,基本的使用很简单

6、持久化的使用

  参考:https://blog.csdn.net/qq_22200097/article/details/82716859
posted @ 2020-10-27 15:36  一个努力的人QAQ  阅读(292)  评论(0编辑  收藏  举报