【架构】关于RabbitMQ

本文详细介绍了RabbitMQ,一个基于AMQP协议的消息中间件,包括其核心概念——交换机、队列和消息传递,以及高可用性和集群特性。RabbitMQ在分布式系统中用于组件解耦,提供了多种交换机类型如direct、topic等,并讨论了在OpenStack中的应用。文章还探讨了为何选择RabbitMQ,以及与其它消息队列产品的性能比较。
摘要由CSDN通过智能技术生成

1      什么是RabbitMQ?

RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然:


 

单向解耦


 

双向解耦(如:RPC

    例如一个日志系统,很容易使用RabbitMQ简化工作量,一个Consumer可以进行消息的正常处理,另一个Consumer负责对消息进行日志记录,只要在程序中指定两个Consumer所监听的queue以相同的方式绑定到同一个exchange即可,剩下的消息分发工作由RabbitMQ完成。
 

 

使用RabbitMQ server需要:

1. ErLang语言包;

2. RabbitMQ安装包;

RabbitMQ同时提供了java的客户端(一个jar包)。

 

2      概念和特性

2.1      交换机(exchange):

1. 接收消息,转发消息到绑定的队列。四种类型:direct, topic, headers and fanout

direct:转发消息到routigKey指定的队列

topic:按规则转发消息(最灵活)

headers:(这个还没有接触到)

fanout:转发消息到所有绑定队列

2. 如果没有队列绑定在交换机上,则发送到该交换机上的消息会丢失。

3

好的,以下是一个基于Spring Cloud和RabbitMQ的示例,演示如何在分布式系统中使用RabbitMQ进行消息传递。 首先,你需要在pom.xml文件中添加以下依赖项: ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-stream-rabbit</artifactId> </dependency> ``` 接下来,你需要在你的应用程序中创建一个名为“Sink”的接口,该接口定义了一个输入通道,用于接收RabbitMQ发送的消息: ```java public interface Sink { String INPUT = "input"; @Input(Sink.INPUT) SubscribableChannel input(); } ``` 然后,你可以在你的应用程序中创建一个Bean来处理接收到的消息。例如,以下代码演示如何打印接收到的消息: ```java @Component public class MessageReceiver { @StreamListener(Sink.INPUT) public void receiveMessage(String message) { System.out.println("Received message: " + message); } } ``` 接下来,你需要配置RabbitMQ连接和队列信息。你可以在application.yml文件中添加以下配置: ```yaml spring: rabbitmq: host: localhost port: 5672 username: guest password: guest my: queue: name: my-queue ``` 最后,你需要在你的应用程序中启用RabbitMQ支持。你可以在你的Spring Boot应用程序上添加@EnableBinding注释,启用消息通道和消息绑定: ```java @SpringBootApplication @EnableBinding(Sink.class) public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 现在,当你向名为“my-queue”的队列发送消息时,应用程序将接收到该消息,并输出到控制台。 希望这个示例能够帮助你在Spring Cloud应用程序中使用RabbitMQ进行消息传递。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值