(二)RabbitMQ工作模式

交换机类型

1、fanout: 对应Publish/subscribe(发布订阅)工作模式
2、direct: 对应routing工作模式
3、topic: 对应的Topics工作模式
4、headers:对应的headers工作模式

一、work queues

在这里插入图片描述
一个生产者对应多个消费者
1、一个消息只会被一个消费者接收,多个消费端监听同一个队列不会重复消费消息。
2、队列采用轮询机制来平均分发消息(队列中有5条消息,就按照2:2:1分发)
3、消费者在处理完某条消息后,才会收到下一条消息
4、发送消息时不需要指定routingkey
5、work queues交换机类型是默认的

应用场景:
一个复杂的计算,将这个计算分成几部分放到消息队列中,不同的服务器各取一部分进行计算,相对一个服务器处理全部的计算来说,节省了不少时间。

二、Publish/subscribe(发布订阅模式,一人发布多人接收)

在这里插入图片描述
发布订阅模式的特点:
1、一个消息只会被一个消费者接收,多个消费端监听同一个队列不会重复消费消息。
2、生产者发布的5条消息发到交换机上,交换机把5条消息都发到队列1、队列2
3、发送消息时不需要指定routingkey
4、发布订阅模式的交换机类型是FANOUT

应用场景:
用户通知:当用户充值成功或转账完成系统通知用户,通知方式有短信、邮件多种方法 。
队列1为短信通知消息队列,队列2为邮件通知消息队列

Publish/subscribe模式涵盖了work queues模式,相比于work queues更为强大

三、路由模式

在这里插入图片描述
路由模式的特点:
1、生产者发布消息时要指定路由key
2、交换机和队列绑定时要指定路由key
3、生产者发布的消息经由Direct类型交换机,交换机根据routingkey转发消息到指定的队列
4、路由模式的交换机类型是DIRECT

生产者可以指定队列发送消息;也可以添加相同的队列路由key达到发布订阅模式的效果(一人发布全部队列都能接收)

路由模式涵盖了发布订阅模式,相比于发布订阅模式更为强大

应用场景:
有一个商城,新添加了一个商品,实时性不是很高,只需要添加到数据库即可,不用刷新缓存。

四、通配符模式

在这里插入图片描述
注:
“#”匹配一个或多个字符串
“*”匹配一个字符串

通配符模式的特点:
1、和路由模式差异不大,只是路由模式指定的路由key是对等匹配的,
而通配符模式是模糊匹配的,一个抵十个
2、通配符模式的交换机类型是TOPIC

通配符模式涵盖了路由模式,相比于路由模式更为强大

应用场景:
当系统需要处理一些现不必要的消息时,将该路由key为×××.message的消息全部放入一个消息队列中暂存。

五、Headers模式

//声明交换机 参数1-换机名称 参数2-交换机类型
channel.exchangeDeclare(EXCHANGE_HEADERS_INFORM, BuiltinExchangeType.HEADERS);

//声明队列
channel.queueDeclare(QUEUE_INFORM_EMAIL, true, false, false, null);
channel.queueDeclare(QUEUE_INFORM_SMS, true, false, false, null);

//设置key-value
Map<String, Object> headers_email = new Hashtable<String, Object>();
headers_email.put("inform_type", "email");
Map<String, Object> headers_sms = new Hashtable<String, Object>();
headers_sms.put("inform_type", "sms");

//队列与交换机绑定
channel.queueBind(QUEUE_INFORM_EMAIL,EXCHANGE_HEADERS_INFORM,"",headers_email);
channel.queueBind(QUEUE_INFORM_SMS,EXCHANGE_HEADERS_INFORM,"",headers_sms);

//消息内容
String message = "huang 哈哈哈哈哈!";

//发布消息时指定key-value
Map<String,Object> headers = new Hashtable<String, Object>();
headers.put("inform_type", "email");//匹配email通知消费者绑定的header
AMQP.BasicProperties.Builder properties = new AMQP.BasicProperties.Builder();
properties.headers(headers);

for(int i=0; i<5; i++){
	//发布消息
    channel.basicPublish(EXCHANGE_HEADERS_INFORM, "", properties.build(), message.getBytes());
}

header模式与routing不同的地方在于,header模式取消routingkey,使用header中的 key/value(键值对)匹配队列,但都是通过指定值发送到对应队列的工作模式。

很奇怪不知道为什么我只能指定一个key-value,否则无法发消息到队列中??????

六、RPC模式

在这里插入图片描述
RPC即客户端远程调用服务端的方法 ,使用MQ可以实现RPC的异步调用,基于Direct交换机实现,流程如下:
1、客户端即是生产者就是消费者,向RPC请求队列发送RPC调用消息,同时监听RPC响应队列。
2、服务端监听RPC请求队列的消息,收到消息后执行服务端的方法,得到方法返回的结果
3、服务端将RPC方法 的结果发送到RPC响应队列
4、客户端(RPC调用方)监听RPC响应队列,接收到RPC调用结果

RabbitMQ提供了6种工作模式,包括简单模式、work queues、Publish/Subscribe发布与订阅模式、Routing路由模式、Topics主题模式、RPC远程调用模式(不太符合MQ)。这些模式分别具有不同的特点和使用场景。简单模式是最基本的模式,消息发送到队列中被消费者接收。工作队列模式是多个消费者共同消费一个队列中的消息。Publish/Subscribe发布与订阅模式中,生产者将消息发送到交换机,然后交换机将消息广播给所有绑定的队列。Routing路由模式是生产者选择将消息发送到特定的路由键上,消费者通过绑定队列和路由键来接收消息。Topics主题模式类似于Routing模式,但是可以使用通配符进行匹配路由键。RPC远程调用模式用于远程调用服务,不太符合消息队列的特点。 可以看出,这些模式在消息的传输、消费者的数量、消息的路由等方面有所不同。工作队列模式不需要定义交换机,而发布/订阅模式需要定义交换机。发布/订阅模式是面向交换机发送消息,而工作队列模式是面向队列发送消息(底层使用默认交换机)。发布/订阅模式需要设置队列和交换机的绑定,而工作队列模式不需要设置,实际上工作队列模式会将队列绑定到默认的交换机。 综上所述,RabbitMQ工作模式包括简单模式、work queues、Publish/Subscribe发布与订阅模式、Routing路由模式、Topics主题模式、RPC远程调用模式。每种模式在实际应用中有不同的用途和特点,可以根据具体需求选择合适的工作模式。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [RabbitMQ工作模式](https://blog.csdn.net/weixin_42440154/article/details/124689685)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [RabbitMQ六种工作模式详解](https://blog.csdn.net/qq_44760609/article/details/125084962)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值