使用Springboot配置生产者、消费者RabbitMQ?

生产者服务

1、引入依赖以及配置rabbitmq

此时我们通过使用springboot来快速搭建一个生产者服务

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

application.yml

server:port: 8080spring:application:name: producterrabbitmq:addresses: 192.168.118.100:5672username: guestpassword: guestvirtual-host: /connection-timeout: 15000
2、定义队列、交换机以及绑定的routingkey

添加一个config包下添加文件

TopicRabbitConfig.java、MsgSender.java

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.TopicExchange;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;//Topic类型交换机配置
@Configuration
public class TopicRabbitConfig {//配置队列@Beanpublic Queue queue1(){return new Queue("queue1");}@Beanpublic Queue queue2(){return new Queue("queue2");}//配置交换机@Beanpublic TopicExchange exchange(){return new TopicExchange("bootExchange");}//绑定队列到交换机并且执行routingkey,之后指定消费者即可通过指定队列来拿到信息@Beanpublic Binding bindingExchangeMessage1(Queue queue1,TopicExchange exchange){return BindingBuilder.bind(queue1).to(exchange).with("cat.red");}@Beanpublic Binding bindingExchangeMessage2(Queue queue2,TopicExchange exchange){return BindingBuilder.bind(queue2).to(exchange).with("*.red");}}
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;//@Description 发送消息到指定交换机@Component
public class MsgSender {@Autowiredprivate AmqpTemplate amqpTemplate;private static String EXCHANGE_NAME = "bootExchange";//发送信息的routingkey=>"cat.red"public void send1(){String routingKey = "cat.red";String msg = "this is my message,routingkey is "+routingKey;//交换机名称、routingkey以及发送的信息amqpTemplate.convertAndSend(EXCHANGE_NAME,routingKey,msg);System.out.println("已成功发送信息:"+msg);}//发送信息的routingkey=>"dog.red"public void send2(){String routingKey = "dog.red";String msg = "this is my message,routingkey is "+routingKey;//交换机名称、routingkey以及发送的信息amqpTemplate.convertAndSend(EXCHANGE_NAME,routingKey,msg);System.out.println("已成功发送信息:"+msg);}
}
3、创建一个测试类

调用两个方法:

import com.changlu.productor.config.MsgSender;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
class ProductorApplicationTests {@Autowiredprivate MsgSender msgSender;@Testvoid sendMsg1() {msgSender.send1();msgSender.send2();}}

当我用2.4.5的时候读不出来,推存使用高版本的spring boot版本

消费者服务

1、引入依赖以及配置rabbitmq
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

application.yml

server:port: 8081  # 设置8081端口spring:application:name: consumerrabbitmq:addresses: 192.168.118.100:5672  # 同样rabbitmq运行端口默认为5672username: guestpassword: guestvirtual-host: /connection-timeout: 15000
2、定义消费者并进行绑定监听

消费者1:绑定对应的queue1

import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;//queue1对应routingkey=>cat.red@Component
@RabbitListener(queues = "queue1")
public class Consumer1 {@RabbitHandlerpublic void process(String msg){System.out.println("queue1收到消息:"+msg);}}

消费者2:绑定对应的queue2

import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;//queue2对应routingkey=>*.red@Component
@RabbitListener(queues = "queue2")
public class Consumer2 {@RabbitHandlerpublic void process(String msg){System.out.println("queue2收到消息:"+msg);}}

测试

对于生产者服务或是消费者服务在该案例中任一一方启动都没有关系。本案例是topic类型的交换机,生产者服务先启动发送的消息会被暂时存储到指定队列中。

紧接着我们启动消费者服务,可以看到对应的queue1、queue2消费者分别收到了对应routingkey匹配的信息,此时我们可以来进行处理了! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/805129.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

规则引擎之LiteFlow应用

官网地址&#xff1a;LiteFlow DEMO 整体结构 1.引入maven依赖 <dependency><groupId>com.yomahub</groupId><artifactId>liteflow-spring-boot-starter</artifactId><version>2.11.4.2</version> </dependency> 2. 配置yml …

Linux--进程的概念(一)

目录 一、冯诺依曼体系结构二、操作系统2.1 什么是操作系统2.2 操作系统的意义 三、进程3.1 进程的基本概念3.2 描述进程——PCB3.3 进程和程序的区别3.4 task_struct-PCB的一种3.5 task_struct的内容分类 四、如何查看进程4.1 通过系统文件查看进程4.2 通过ps指令查看进程 五、…

uni-app项目创建方式

原生小程序与uni-app的区别 创建uni-app的方式 1.通过HBuilderX创建 2.通过命令行创建 vue3ts版&#xff1a;npx degit dcloudio/uni-preset-vue#vite-ts 项目名称 用vscode开发uni-app项目 安装命令&#xff1a;npm i -D types/wechat-miniprogram uni-helper/uni-app-typ…

大话设计模式——17.状态模式(State Pattern)

简介 对象的行为依赖于它的状态&#xff08;属性&#xff09;&#xff0c;可以根据状态的改变而改变相关行为。 UML图&#xff1a; 应用场景&#xff1a; 对象的行为取决于其状态&#xff0c;并且必须要在运行时刻根据状态而改变行为代码中包含大量与对象状态有关的条件语句 …

4月10日(信息差)

快捷新闻&#xff1a; &#x1f396; 素材来源官方媒体/网络新闻 &#x1f384; 地震预警App被曝收10元年费&#xff0c;回应称仅限苹果系统 &#x1f30d; 2024清明档首日票房破2亿 &#x1f30b; 浙江省杭州市余杭区设立2亿元网络微短剧发展基金 &#x1f381; 抖音拟以超 7…

小狐狸转账失败,提示gas费过高

做web3开发的时候&#xff0c;明明自己小狐狸里还有2.15的代币&#xff0c;但页面我要转出2.1的时候&#xff0c;明明是够的&#xff0c;而且使用小狐狸提示gas费用是21000&#xff0c;这已经是最小的了&#xff0c;但网页转出到其他账户总是提示失败。而且这个错误非常不好捕获…

使用OMP复原一维信号(MATLAB)

参考文献 https://github.com/aresmiki/CS-Recovery-Algorithms/tree/master MATLAB代码 %% 含有噪声 % minimize ||x||_1 % subject to: (||Ax-y||_2)^2<eps; % minimize : (||Ax-y||_2)^2lambda*||x||_1 % y传输中可能含噪 yyw % %% clc;clearvars; close all; %% 1.构…

【Redis】底层跳表实现

先巩固Redis的数据类型以及底层的数据结构&#xff1a; ZSet&#xff08;有序集合&#xff09;可以使用两种不同的内部数据结构来表示&#xff1a;压缩列表&#xff08;ziplist&#xff09;和跳跃表&#xff08;skiplist&#xff09;。 跳表是redis底层SortedSet(ZSet)的数据…

深入理解nginx realip模块[上]

目录 1. 引言2. Real IP模块的使用2.1 启用Real IP模块2.2 配置Real IP模块2.2.1 配置指令2.2.2 举例 3. 变量的使用 深入理解nginx realip模块[上] 深入理解nginx realip模块[下] 1. 引言 nginx 的 Real IP 模块用于解决代理服务器转发请求到nginx上时可能出现的 IP 地址问题…

C++11 如何优雅地封装线程库以实现多线程编程

在C11标准中&#xff0c;多线程编程被正式纳入语言规范&#xff0c;通过引入 <thread> 头文件&#xff0c;C为开发者提供了一套统一且高效的线程API。std::thread 是 C11 标准库中用于创建和管理线程的核心类。本文将详细介绍C11是如何封装Thread库&#xff0c;以及如何通…

QT:信号与槽

作业&#xff1a; 完善对话框&#xff0c;点击登录对话框&#xff0c;如果账号和密码匹配&#xff0c;则弹出信息对话框&#xff0c;给出提示”登录成功“&#xff0c;提供一个Ok按钮&#xff0c;用户点击Ok后&#xff0c;关闭登录界面&#xff0c;跳转到其他界面 如果账号和…

使用axios进行前后端数据传输

最近在和朋友合作写一个新的项目&#xff0c;前后端进行了分离&#xff0c;既然是分离的&#xff0c;肯定需要交互&#xff0c;今天这篇文章详细介绍一下数据交互的一种常见方式&#xff1a;使用axios,希望对大家有所帮助。 前端&#xff1a;以LoginPage.vue登录页面为例&…

HarmonyOS实战开发-如何实现电话服务中发送短信的功能。

介绍 本示例使用ohos.telephony.sms 接口展示了电话服务中发送短信的功能。 效果预览 使用说明&#xff1a; 首页点击创建联系人&#xff0c;弹框输入联系人姓名和电话&#xff0c;点击确定按钮后&#xff0c;联系人列表中添加该联系人;点击管理&#xff0c;该按钮变成取消&…

同步压缩理论

参考 在频率方向进行能量重新分配&#xff08;分配到中心&#xff09; 时频重排

【算法基础】选择排序与冒泡排序的思想与实现

文章目录 1. 选择排序1.1 思想1.2 实现 2. 冒泡排序2.1 思想2.2 实现 1. 选择排序 1.1 思想 选择排序的思想很简单&#xff0c;如上图所示。在每一次遍历子数组的过程中&#xff0c;选择最小的和子数组的第一位交换。子数组的选择从一开始的整个数组&#xff0c;到后面范围逐渐…

C++的stack和queue类(一):适配器模式、双端队列与优先级队列

目录 基本概念 适配器模式 stack.h test.cpp 双端队列-deque 仿函数 优先级队列 基本概念 1、stack和queue不是容器是容器适配器&#xff0c;它们没有迭代器 2、stack的quque的默认容器是deque&#xff0c;因为&#xff1a; stack和queue不需要遍历&#xff0…

保姆级教程带你实现HarmonyOS手语猜一猜元服务(三)

&#x1f680;四、元服务代码分析 &#x1f50e;1.元服务代码结构介绍 AppScope中存放应用全局所需要的资源文件。entry是应用的主模块&#xff0c;存放HarmonyOS应用的代码、资源等。oh_modules是工程的依赖包&#xff0c;存放工程依赖的源文件。build-profile.json5是工程级…

Android Studio修改项目包名

1.第一步&#xff0c;项目结构是这样的&#xff0c;3个包名合在了一起&#xff0c;我们需要把每个包名单独展示出来 2.我们点击这个 取消选中后的包名结构是这样的&#xff0c;可以看到&#xff0c;包名的每个文件夹已经展示分开了&#xff0c;现在我们可以单独对每个包名文件夹…

qlabel 跑马灯

就是简单的定时器➕qlabel实现&#xff0c;思路&#xff1a;每一秒钟&#xff0c;把label上最右边的文字切下来&#xff0c;然后放在最左边&#xff0c;这样不断切&#xff0c;就相当于是文字轮转了

2024年商家争相入驻视频号小店,究竟有什么吸引力,新契机?

大家好&#xff0c;我是电商花花。 直播电商作为一种直观、生动的媒体形式&#xff0c;已经深入人心。 通过达人直播带货&#xff0c;短视频带货&#xff0c;商家可以更直观地向消费者展示产品&#xff0c;提升销售效果。 同时&#xff0c;视频号小店的开通&#xff0c;使得…