学习之路-RabbitMQ(三):RabbitMQ的工作模式

RabbitMQ有以下几种工作模式 : 1、Work queues 工作队列 2、Publish/Subscribe 发布订阅模式 3、Routing 路由模式 4、Topics 通配符模式 5、Header 6、RPC

一:Work queues 工作队列 work queues与入门程序相比,多了一个消费端,两个消费端共同消费同一个队列中的消息。 应用场景:对于 任务过重或任务较多情况使用工作队列可以提高任务处理的速度。 代码: 测试: 1、使用入门程序,启动多个消费者。 2、生产者发送多个消息。 结果: 1、一条消息只会被一个消费者接收; 2、rabbit采用轮询的方式将消息是平均发送给消费者的; 3、消费者在处理完某条消息后,才会收到下一条消息。 二:Publish/Subscribe 发布订阅模式

代码:

代码:

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 = "email inform to user"+i;
Map<String,Object> headers = new Hashtable<String, Object>();
headers.put("inform_type", "email");
//匹配email通知消费者绑定的header 
headers.put("inform_type", "sms");
//匹配sms通知消费者绑定的header 
AMQP.BasicProperties.Builder properties = new AMQP.BasicProperties.Builder(); properties.headers(headers);
//Email通知
channel.basicPublish(EXCHANGE_HEADERS_INFORM, "", properties.build(), message.getBytes());

发送邮件消费者:

channel.exchangeDeclare(EXCHANGE_HEADERS_INFORM, BuiltinExchangeType.HEADERS);
Map<String, Object> headers_email = new Hashtable<String, Object>(); 
headers_email.put("inform_email", "email");
//交换机和队列绑定 
channel.queueBind(QUEUE_INFORM_EMAIL,EXCHANGE_HEADERS_INFORM,"",headers_email); 
//指定消费队列
channel.basicConsume(QUEUE_INFORM_EMAIL, true, consumer);

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

经验分享 程序员 微信小程序 职场和发展