RabbitMQ使用例子
一些概念:
RabbiMQ的认知:首先要抛弃熟悉的客户端和服务器的观念。对于RabbitMQ应该认为是消息投递服务。、
其次:从应用程序角度来看RabbitMQ的话,应用程序要先决定是个消息的发送者还是消息的接受者。
如果从RabbitMQ的角度来看的话,应用程序是消息的生产者还是消息的消费者。
Topic:
在不同的消息中间件中, Topic
可能对应着不同的概念,
比如:在RabbitMQ中的它对应了Exchange、而在Kakfa中则对应了Kafka中的Topic。
消息组:
默认情况下,当没有为应用指定消费组的时候,Spring Cloud Stream会为其分配一个独立的匿名消费组。
当一个消费组中有多个应用实例,只会有一个成员真正的收到消息并进行处理。
消息分区:
当生产者将消息数据发送给多个消费者实例时,保证拥有共同特征的消息数据始终是由同一个消费者实例接收和处理
1.创建SpringBoot 项目:Eureka 和 Rabbitmq_hello 两个项目
其中对于Rabbitmq_hello 项目加入RabbitMQ依赖:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency>
2. 编写配置类RabbitConfig , 用来配置队列、交换器、路由等高级信息
/*** 创建RabbitMQ的配置类 RabbitConfig,用来配置队列、交换器、路由等高级信息。*/
@Configuration
public class RabbitConfig {@Beanpublic Queue helloQueue() {return new Queue("hello");}
}
3. 创建消息发送类:Sender
/**** 通过注入 AmqpTemplate接口的实例来实现消息的发送,* AmqpTemplate接口定义了一套针对AMQP协议的基础操作。** 在该生产者,我们会产生一个字符串,并发送到名为 hello的队列中。*/
@Component
public class Sender {@Autowiredprivate AmqpTemplate amqpTemplate;public void send() {String context = "hello " + new Date();System.out.println("sender: " + context);this.amqpTemplate.convertAndSend("hello",context);}
}
4. 创建消息接收类:Receiver
@Component
@RabbitListener(queues = "hello")
public class Receiver {@RabbitHandlerpublic void process(String hello) {System.out.println("Receiver:" + hello);}
}
5. 写个测试类:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class ServerRabbitmqHelloApplicationTests {@Autowiredprivate Sender sender;@Testpublic void hello() throws Exception {sender.send();}
}
6. 测试结果截图:
7. 总结:
对于 @RabbitListener 这个注解要注意
1.在启动类上添加@EnableRabbit注解
2.在Spring容器中托管一个RabbitListenerContainerFactory,默认实现类SimpleRabbitListenerContainerFactory
3.编写一个消息处理器类托管到Spring容器中,并使用@RabbitListener注解标注该类为RabbitMQ的消息处理类
4.使用@RabbitHandler注解标注在方法上,表示当有收到消息的时候,就交给带有@RabbitHandler的方法处理,
具体找哪个方法需要根据MessageConverter转换后的对象类型决定
8.参考:纯洁的微笑博客
9. rabbitmq菜单管理 :http://localhost:15672/
查看创建的hello队列
修改Receiver 类:
@Component
public class Receiver {@RabbitHandler@RabbitListener(queues = "hello")public void process(byte[] hello) {System.out.println("Receiver:" + hello);try {System.out.println(new String(hello, "utf-8"));} catch (UnsupportedEncodingException e) {e.printStackTrace();}}
}
重新启动项目,并在RabbitMQ管理菜单重新发送消息:
RabbitMQ使用例子相关推荐
- Kafka、ActiveMQ、RabbitMQ、RocketMQ 区别以及高可用原理
为什么使用消息队列 其实就是问问你消息队列都有哪些使用场景,然后你项目里具体是什么场景,说说你在这个场景里用消息队列是什么? 面试官问你这个问题,期望的一个回答是说,你们公司有个什么业务场景,这个业务 ...
- kafka学习_《从0到1学习Flink》—— Flink 读取 Kafka 数据写入到 RabbitMQ
前言 之前有文章 <从0到1学习Flink>-- Flink 写入数据到 Kafka 写过 Flink 将处理后的数据后发到 Kafka 消息队列中去,当然我们常用的消息队列可不止这一种, ...
- RabbitMq初识(一)
Java消息服务(Java Message Service,JMS)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间或分布式系统中发送消息,并进行异步通 ...
- 多线程、Redis、rabbitmq面试题
设计模式: 1.简单工厂模式:定义一个实例化对象的类,根据输入参数的不同,来实例化对象 2.单例模式:确保一个类只有一个实例,提供一个公共的方法来获取对象的实例 3.原型模式:复制一个现有的实例创建一 ...
- 【2021最新版】RabbitMQ面试题总结(32道题含答案解析)
文章目录 1.什么是rabbitmq? 2.为什么要使用rabbitmq? 3.使用rabbitmq的场景. 4.如何确保消息正确地发送至RabbitMQ?如何确保消息接收方消费了消息? 5.如何避免 ...
- Python中RabbitMQ的使用
Python中RabbitMQ的使用 文章目录 Python中RabbitMQ的使用 一.AMQP协议 1.工作过程 2.细节问题 3.Exchange交换机 主题交换机: 4.Queue队列 5.C ...
- .NET Core微服务之基于MassTransit实现数据最终一致性(Part 1)
Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.预备知识:数据一致性 关于数据一致性的文章,园子里已经有很多了,如果你还不了解,那么可以通过以下的几篇文章去快速地了解了解,有个感性认 ...
- 支持插件的消息中间件【msg broker with plugin】 - 知然 - 博客园
支持插件的消息中间件[msg broker with plugin] - 知然 - 博客园 支持插件的消息中间件[msg broker with plugin] 支持插件的消息中间件 msg brok ...
- 消息队列面试 - 如何保证消息队列的高可用?
面试题 如何保证消息队列的高可用? 面试官心理分析 如果有人问到你 MQ 的知识,高可用是必问的.上一讲提到,MQ 会导致系统可用性降低.所以只要你用了 MQ,接下来问的一些要点肯定就是围绕着 MQ ...
- spring cloud bus_Spring Cloud学习笔记--消息总线(Bus)
Spring Cloud Bus links nodes of a distributed system with a lightweight message broker. This can the ...
最新文章
- listview 滑动以后设置最上面一行为整行展示
- 上海day2--两年前最烧脑的环境变量
- 量子力学考研等待计算机吗,考研《量子力学》专业课满分经验谈
- 项目分发系统-expect
- [Nhibernate]SchemaExport工具的使用(二)——创建表及其约束、存储过程、视图
- python学习必会知识点:对文件操作详解
- 华硕笔记本卸载并重新安装Ubuntu16.04
- 1089 狼人杀-简单版 (20 分)
- 【炼数成金 NOSQL引航 三】 Redis使用场景与案例分析
- POJ 2965 开冰箱的门(回溯)
- 数据中心 48 V 直流供电,Vicor 如何解决“最后一英寸”电源设计难题?
- 10月15日发布?一加7T系列概念图曝光:依旧后置竖排相机模组
- 二层、三层、四层交换的比较
- 字符串转换为合法IP地址
- Vue.js实际开发案例(不断整理中...)
- 《Sanmill 直棋游戏》创作之旅
- 每天劝你辞职的同事,反而是公司待最久的
- excel加水印,由于excel没有加水印功能,实际上操作是将图片丢进去
- leetcode:2448. 使数组相等的最小开销【猜结论落在给定点 + 考虑初始值和变化量 + 三分法模板学习】
- 微信小程序样式-元素选择器的使用