springboot使用activemq同时接收queue和topic消息
原文链接:https://blog.csdn.net/jia_costa/article/details/79354478
新建springboot项目, pom文件如下
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId>
<artifactId>activemq-test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging> <name>activemq-test</name>
<description></description> <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.10.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build> </project>
配置类
package com.example.config; import javax.jms.ConnectionFactory;
import javax.jms.Destination; import org.apache.activemq.command.ActiveMQQueue;
import org.apache.activemq.command.ActiveMQTopic;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jms.config.DefaultJmsListenerContainerFactory;
import org.springframework.jms.config.JmsListenerContainerFactory; @Configuration
public class ActivemqConfig { /**
* 自定义了4个Destination,两个queue,两个topic
*/
@Bean
public Destination queue1() {
return new ActiveMQQueue("queue-1");
} @Bean
public Destination queue2() {
return new ActiveMQQueue("queue-2");
} @Bean
public Destination topic1() {
return new ActiveMQTopic("topic-1");
} @Bean
public Destination topic2() {
return new ActiveMQTopic("topic-2");
} /**
* JmsListener注解默认只接收queue消息,如果要接收topic消息,需要设置containerFactory
*/
@Bean
public JmsListenerContainerFactory<?> topicListenerContainer(ConnectionFactory activeMQConnectionFactory) {
DefaultJmsListenerContainerFactory topicListenerContainer = new DefaultJmsListenerContainerFactory();
topicListenerContainer.setPubSubDomain(true);
topicListenerContainer.setConnectionFactory(activeMQConnectionFactory);
return topicListenerContainer;
} } controller package com.example.controller; import javax.annotation.Resource;
import javax.jms.Destination; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController; /**
* 通过页面访问的方式生产消息
*/
@RestController
public class ProviderController { @Autowired
private JmsTemplate jmsTemplate; @Resource(name = "queue1")
private Destination queue1; @Resource(name = "topic1")
private Destination topic1; @GetMapping("/send/queue1")
public String send1() {
jmsTemplate.convertAndSend(queue1, "hello queue-1");
return "ok";
} @GetMapping("/send/topic1")
public String send2() {
jmsTemplate.convertAndSend(topic1, "hello topic-1");
return "ok";
} }
接收消息
package com.example.message; import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component; /**
* 接收处理消息
*/
@Component
public class MessageHandler { @JmsListener(destination="queue-1")
public void recieve1(String message) {
System.out.println("###################" + message + "###################");
} @JmsListener(destination="topic-1", containerFactory="topicListenerContainer")
public void recieve2(String message) {
System.out.println("###################" + message + "###################");
} }
配置文件application.properties
spring.activemq.broker-url=tcp://192.168.32.128:61616
启动类
package com.example; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication
public class ActivemqTestApplication { public static void main(String[] args) {
SpringApplication.run(ActivemqTestApplication.class, args);
}
}
访问http://localhost:8080/send/queue1或者http://localhost:8080/send/topic1,可以看到控制台的输出
springboot使用activemq同时接收queue和topic消息的更多相关文章
- SpringBoot配置ActiveMQ
1.添加依赖 <!-- activeMQ --> <dependency> <groupId>org.springframework.boot</groupI ...
- 解决Springboot整合ActiveMQ发送和接收topic消息的问题
环境搭建 1.创建maven项目(jar) 2.pom.xml添加依赖 <parent> <groupId>org.springframework.boot</group ...
- activemq安装运行及其在springboot中的queue和topic使用
安装activemq 运行 springboot使用 依赖 配置 Producer Consumer ComsumerTopic 使用 安装activemq http://activemq.apach ...
- SpringBoot整合ActiveMq实现Queue和Topic两种模式(看不懂你来打我)
目录 一.前言 二.ActiveMq的下载和使用 三.依赖准备 四.yml文件配置 五.配置Bean 六.创建生产者(Queue+Topic) 七.创建消费者(Topic模式下) 八.测试结果(Top ...
- ActiveMQ的queue以及topic两种消息处理机制分析
1 queue与topic的技术特点对比 对比项 Topic Queue 概要 Publish Subscribe messaging 发布订阅消息 Point-to-Point 点对点 有无状 ...
- ActiveMQ——activemq的详细说明,queue、topic的区别(精选)
JMS中定义了两种消息模型:点对点(point to point, queue)和发布/订阅(publish/subscribe,topic).主要区别就是是否能重复消费. 点对点:Queue,不可重 ...
- ActiveMQ queue和topic,持久订阅和非持久订阅
消息的 destination 分为 queue 和 topic,而消费者称为 subscriber(订阅者).queue 中的消息只会发送给一个订阅者,而 topic 的消息,会发送给每一个订阅者. ...
- 【ActiveMQ入门-5】ActiveMQ学习-Queue与Topic的比较
Queue与Topic的比较 1.JMS Queue执行load balancer语义: 一条消息仅能被一个consumer收到. 如果在message发送的时候没有可用的consumer,那么它将被 ...
- SpringBoot JMS(ActiveMQ) 使用实践
ActiveMQ 1. 下载windows办的activeMQ后,在以下目录可以启动: 2. 启动后会有以下提示 3. 所以我们可以通过http://localhost:8161访问管理页面,通过tc ...
随机推荐
- 内置对象(Math、Date、String、Array、基本包装类型)
一.内置对象 js中三种对象:内置对象.自定义对象.浏览器对象 实例对象是指通过构造函数创建出来,然后实例化的对象(new关键字) 静态对象是指不需要创建,直接调用的对象,可以在整个JS里调用的公共对 ...
- luogu 3380
树状数组套权值线段树 #include <iostream> #include <cstdio> #include <algorithm> #include < ...
- 6、transformation和action1
一.transformation和action入门 1.介绍 Spark支持两种RDD操作:transformation和action.transformation操作会针对已有的RDD创建一个新的R ...
- 在Ubuntu Server上使用vtk处理体数据,直接得到渲染结果图片避免显示窗口
概述 需要调用vtk对体数据进行渲染处理,处理结果直接存为图片而不通过窗口显示. 直接使用vtkRenderWindow加上vtkWindowToImageFilter类写入,在调用渲染的过程中会出现 ...
- CF293E Close Vertice
如果没有边数限制就是裸的淀粉质,如果有了加上一个树状数组记边数就行了. #include<stdio.h> #include<stdlib.h> #include<str ...
- Vue-cli 构建项目后 npm run build 如何在本地运行查看
当你在本地直接打开index.html 你会发现了一丢丢404,这时候你有两个办法解决问题: 1:改变路径为相对路径. 在config 文件夹中index.js的 build对象里, 把 assets ...
- mysql解压文件安装
mysql.zip版本的安装教程 MySQL zip版本安装 一直以来都习惯了使用MySQL安装文件(.exe),今天下载了一个.zip版本的MySQL,安装过程中遇到了一些问题,如下: 1.在M ...
- 全局设置页面颜色 返回按钮样式 iOS
思路 1.建个UIViewController的分类 2.hook方法viewDidLoad(Aspects是三方库 可以不用) 3.看下面蓝色部分代码 #import "UIViewCon ...
- NSCTF 2017-pwn2
目录 程序基本信息 程序漏洞 整体思路 exp脚本 发现的问题 内容参考 程序基本信息 32位动态链接程序,开启了数据段不可执行以及栈溢出保护 程序漏洞 在函数中sub_80487fa中有一个格式化字 ...
- 关于Scanner调用 sc.nextInt() 异常try后不能二次输入导致死循环问题
先看下简化的代码,引出问题所在: public class Run { public static void main(String[] args) { Scanner sc = new Scanne ...