typeScript webpack vue路由 后台界面模板 electron教程 less官网 微信pc版无法获取二维码 linux 获取系统时间 pip环境变量配置 python中文文档 python网页编程 java变量 搭建java开发环境 java创建集合 java输出当前时间 java接口开发 java中long java文件读取 java项目下载 id解锁大师 通达信金融终端官网 完美手游模拟器 选择模拟位置信息应用 keytool下载 vfloppy js分页 fireworks下载 ajaxpro 免费ftp空间 dnf胜利的证明有什么用 cad2008汉化包 微信预约系统 内存条是什么 脚本录制 唯品会客服在哪 樱牛在哪 scatter函数 lol皮肤修改 一键系统重装 行转列
当前位置: 首页 > 学习教程  > 编程语言

springboot整合ActiveMQ消息中间件

2020/11/24 10:51:43 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

activeMq 作为一个支持 JMS 规范的消息中间件,作为发送消息者和接收消息者的中间第三者,可以解耦系统应用、使消息异步传输处理,甚至可以解决流量高峰问题。支持点对点、点对多(订阅-发布)模式。(其他同行还…

activeMq 作为一个支持 JMS 规范的消息中间件,作为发送消息者和接收消息者的中间第三者,可以解耦系统应用、使消息异步传输处理,甚至可以解决流量高峰问题。支持点对点、点对多(订阅-发布)模式。(其他同行还有:rabbitMq 、kafka 、rocketMq)

那 activeMq 组成清楚了,有发送消息的,消息给谁呢,得定义好指定名字的消息队列,然后消息接收者根据指定名字的队列进行消息消费。

目的:了解 activeMq 及与 springboot 简单整合

一、环境准备

1、软件准备(以下是我的版本信息)

idea2020、maven 3.6.3、jdk1.8、activeMq 5.16(windows版本)

activeMq 下载:去 activeMq 官网下载 (进网页有些慢,下载还是挺快的)

2、activeMq 测试

1)、启动 activeMq
直接解压,进入到 bin 目录下,cmd 进入窗口,输入命令: activemq.bat start

2)、验证 activeMq
浏览器访问: http://localhost:8161/admin , 用户名和密码都是 admin ,然后就进入主界面,点击第二个 Queue 选项可以看到,现在还没有队列消息
在这里插入图片描述

二、springboot 整合 activeMq

这里我就不再创建个两个独立的项目了,直接一个项目演示了。

1、配置文件

1)、pom.xml 中添加依赖

	<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-activemq</artifactId>
    </dependency>
    <!-- springboot2.0 添加这个依赖,否则 JmsMessagingTemplate 依赖注入报错 -->
    <dependency>
        <groupId>org.messaginghub</groupId>
        <artifactId>pooled-jms</artifactId>
        <version>1.0.4</version>
    </dependency>
    <!-- 测试需要用 -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>

2)、application.yml 中添加 activemq 配置

spring:
  activemq:
    # 默认两个端口, 8161是访问控制台, 61616是java用的tcp端口
    broker-url: tcp://127.0.0.1:61616
    # 默认代理URL是否应该在内存中
    in-memory: false
    user: admin
    password: admin
    pool:
      # true表示使用连接池, false每发送一条数据创建一个连接
      enabled: true
      # 连接池最大连接数
      max-connections: 5
      # 空闲连接的过期时间, 默认为30秒
      idle-timeout: 30000
    # jms:
   	# 默认情况下activemq提供的是queue模式,若要使用topic模式需要配置下面配置
    #   pub-sub-domain: true  

2、正式开发

1)、定义消息队列
——ActiveMqConfig.java

package com;

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

import javax.jms.Queue;

@Configuration
public class ActiveMqConfig {

    @Bean
    public Queue queue() {
        //消费者要根据这里的名称来进行消费, 取名字要跟业务有关
        return new ActiveMQQueue("userQueue");
    }
}

2)、定义消息生产者
——MessageProducer.java

package com;

import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.stereotype.Component;

import javax.jms.Queue;

@Component
public class MessageProducer {

    private final JmsMessagingTemplate jmsMessagingTemplate;
    private final Queue queue;
    public void sendMessage(String message) {
        jmsMessagingTemplate.convertAndSend(queue, message);
    }

    public MessageProducer(JmsMessagingTemplate jmsMessagingTemplate, Queue queue) {
        this.jmsMessagingTemplate = jmsMessagingTemplate;
        this.queue = queue;
    }
}

3)、定义消息消费者
——MessageConsumer.java

package com;

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

import javax.jms.Queue;

@Component
public class MessageConsumer {
    private JmsMessagingTemplate jmsMessagingTemplate;

    @JmsListener(destination = "userQueue")
    public void send(String message) {
        System.out.println("接收到消息:"+message);
    }

    public MessageConsumer(JmsMessagingTemplate jmsMessagingTemplate) {
        this.jmsMessagingTemplate = jmsMessagingTemplate;
    }
}

3、单元测试

1)、创建单元测试类
项目中在 test 包下就有现成的测试类。
如果你想自己创建,那么,选中一个类,然后 alt + enter,选择 “create test”,
在这里插入图片描述
我直接用自带的测试类,如下:
——ShopApplicationTests.java

package com;

import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
class ShopApplicationTests {

    @Autowired
    private MessageProducer messageProducer;

    @Test
    void contextLoads() {
        messageProducer.sendMessage("我发送了一条关于美国新冠肺炎的消息...");
    }
}

2)、运行查看结果
鼠标选中测试类中的方法,右键运行方法,绿的出来了就成功了。点击控制台左侧方法看到成功接收消息:
在这里插入图片描述
大功告成,此刻咱们再回过头去看一看 ActiveMq 的控制台,发现多了一个队列消息:
在这里插入图片描述
以上是点对点的消息模型,搞定!


本文链接: http://www.dtmao.cc/news_show_400371.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?