- 浏览: 626721 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (819)
- java开发 (110)
- 数据库 (56)
- javascript (30)
- 生活、哲理 (17)
- jquery (36)
- 杂谈 (15)
- linux (62)
- spring (52)
- kafka (11)
- http协议 (22)
- 架构 (18)
- ZooKeeper (18)
- eclipse (13)
- ngork (2)
- dubbo框架 (6)
- Mybatis (9)
- 缓存 (28)
- maven (20)
- MongoDB (3)
- 设计模式 (3)
- shiro (10)
- taokeeper (1)
- 锁和多线程 (3)
- Tomcat7集群 (12)
- Nginx (34)
- nodejs (1)
- MDC (1)
- Netty (7)
- solr (15)
- JSON (8)
- rabbitmq (32)
- disconf (7)
- PowerDesigne (0)
- Spring Boot (31)
- 日志系统 (6)
- erlang (2)
- Swagger (3)
- 测试工具 (3)
- docker (17)
- ELK (2)
- TCC分布式事务 (2)
- marathon (12)
- phpMyAdmin (12)
- git (3)
- Atomix (1)
- Calico (1)
- Lua (7)
- 泛解析 (2)
- OpenResty (2)
- spring mvc (19)
- 前端 (3)
- spring cloud (15)
- Netflix (1)
- zipkin (3)
- JVM 内存模型 (5)
- websocket (1)
- Eureka (4)
- apollo (2)
- idea (2)
- go (1)
- 业务 (0)
- idea开发工具 (1)
最新评论
-
sichunli_030:
对于频繁调用的话,建议采用连接池机制
配置TOMCAT及httpClient的keepalive以高效利用长连接 -
11想念99不见:
你好,我看不太懂。假如我的项目中会频繁调用rest接口,是要用 ...
配置TOMCAT及httpClient的keepalive以高效利用长连接
Headers类型的exchange使用的比较少,它也是忽略routingKey的一种路由方式。是使用Headers来匹配的。Headers是一个键值对,可以定义成Hashtable。发送者在发送的时候定义一些键值对,接收者也可以再绑定时候传入一些键值对,两者匹配的话,则对应的队列就可以收到消息。匹配有两种方式all和any。这两种方式是在接收端必须要用键值"x-mactch"来定义。all代表定义的多个键值对都要满足,而any则代码只要满足一个就可以了。fanout,direct,topic exchange的routingKey都需要要字符串形式的,而headers exchange则没有这个要求,因为键值对的值可以是任何类型。
1.生产者Producer.Java
2.消费者Consumer.java
转自:http://blog.csdn.net/zhu_tianwei/article/details/40923131
1.生产者Producer.Java
package cn.slimsmart.rabbitmq.demo.headers; 02. 03.import java.util.Date; 04.import java.util.Hashtable; 05.import java.util.Map; 06. 07.import org.springframework.amqp.core.ExchangeTypes; 08. 09.import com.rabbitmq.client.AMQP; 10.import com.rabbitmq.client.AMQP.BasicProperties; 11.import com.rabbitmq.client.AMQP.BasicProperties.Builder; 12.import com.rabbitmq.client.Channel; 13.import com.rabbitmq.client.Connection; 14.import com.rabbitmq.client.ConnectionFactory; 15. 16.public class Producer { 17. private final static String EXCHANGE_NAME = "header-exchange"; 18. 19. @SuppressWarnings("deprecation") 20. public static void main(String[] args) throws Exception { 21. // 创建连接和频道 22. ConnectionFactory factory = new ConnectionFactory(); 23. factory.setHost("192.168.36.102"); 24. // 指定用户 密码 25. factory.setUsername("admin"); 26. factory.setPassword("admin"); 27. // 指定端口 28. factory.setPort(AMQP.PROTOCOL.PORT); 29. Connection connection = factory.newConnection(); 30. Channel channel = connection.createChannel(); 31. 32. //声明转发器和类型headers 33. channel.exchangeDeclare(EXCHANGE_NAME, ExchangeTypes.HEADERS,false,true,null); 34. String message = new Date().toLocaleString() + " : log something"; 35. 36. Map<String,Object> headers = new Hashtable<String, Object>(); 37. headers.put("aaa", "01234"); 38. Builder properties = new BasicProperties.Builder(); 39. properties.headers(headers); 40. 41. // 指定消息发送到的转发器,绑定键值对headers键值对 42. channel.basicPublish(EXCHANGE_NAME, "",properties.build(),message.getBytes()); 43. 44. System.out.println("Sent message :'" + message + "'"); 45. channel.close(); 46. connection.close(); 47. } 48.}
2.消费者Consumer.java
package cn.slimsmart.rabbitmq.demo.headers; 02. 03.import java.util.Hashtable; 04.import java.util.Map; 05. 06.import org.springframework.amqp.core.ExchangeTypes; 07. 08.import com.rabbitmq.client.AMQP; 09.import com.rabbitmq.client.Channel; 10.import com.rabbitmq.client.Connection; 11.import com.rabbitmq.client.ConnectionFactory; 12.import com.rabbitmq.client.QueueingConsumer; 13. 14.public class Consumer { 15. private final static String EXCHANGE_NAME = "header-exchange"; 16. private final static String QUEUE_NAME = "header-queue"; 17. 18. public static void main(String[] args) throws Exception { 19. // 创建连接和频道 20. ConnectionFactory factory = new ConnectionFactory(); 21. factory.setHost("192.168.36.102"); 22. // 指定用户 密码 23. factory.setUsername("admin"); 24. factory.setPassword("admin"); 25. // 指定端口 26. factory.setPort(AMQP.PROTOCOL.PORT); 27. Connection connection = factory.newConnection(); 28. Channel channel = connection.createChannel(); 29. 30. //声明转发器和类型headers 31. channel.exchangeDeclare(EXCHANGE_NAME, ExchangeTypes.HEADERS,false,true,null); 32. channel.queueDeclare(QUEUE_NAME,false, false, true,null); 33. 34. Map<String, Object> headers = new Hashtable<String, Object>(); 35. headers.put("x-match", "any");//all any 36. headers.put("aaa", "01234"); 37. headers.put("bbb", "56789"); 38. // 为转发器指定队列,设置binding 绑定header键值对 39. channel.queueBind(QUEUE_NAME, EXCHANGE_NAME,"", headers); 40. QueueingConsumer consumer = new QueueingConsumer(channel); 41. // 指定接收者,第二个参数为自动应答,无需手动应答 42. channel.basicConsume(QUEUE_NAME, true, consumer); 43. while (true) { 44. QueueingConsumer.Delivery delivery = consumer.nextDelivery(); 45. String message = new String(delivery.getBody()); 46. System.out.println(message); 47. } 48. } 49.}
转自:http://blog.csdn.net/zhu_tianwei/article/details/40923131
发表评论
-
RocketMQ教程,包含所有MQ核心知识点!
2022-04-28 13:49 156RocketMQ教程,包含所有MQ核心知识点 原创 | Ja ... -
rabbitmq死信队列和延时队列的使用
2021-12-25 23:19 242rabbitmq死信队列和延时队列的使用 -
IM消息送达保证机制实现(一):保证在线实时消息的可靠投递
2021-12-14 11:49 166[url=http://www.52im.net/thread ... -
RabbitMQ高级特性TTL队列/消息
2021-09-04 22:47 212RabbitMQ高级特性-TTL队列/消息 RabbitMQ ... -
如何保证消息不丢失,消息顺序执行-面试
2021-05-26 20:24 232关于MQ的几件小事(四)如何保证消息不丢失 如何保证Rab ... -
RabbitMQ 相关问题汇总
2017-06-28 17:43 428RabbitMQ 相关问题汇总 rabbitmq基础概念与基 ... -
rabbitMq集成Spring后,消费者设置手动ack,并且在业务上控制是否ack
2017-06-12 20:30 2156http://blog.csdn.net/u010841296 ... -
rabbitmq消费消息的两种方式
2016-12-05 20:12 1000rabbitMQ中consumer通过建立到queue的连接, ... -
rabbitmq——镜像队列
2016-12-02 20:05 11201. 镜像队列的设置 镜像队列的配置通过添加policy完成 ... -
RabbitMQ 内部实现
2016-12-01 14:41 1015http://blog.csdn.net/joeyon1985 ... -
OpenStack RabbitMQ 集群-后续整理
2016-12-01 14:18 504参考:http://www.iyunv.com/thread- ... -
RabbitMQ (三) 发布/订阅
2016-11-30 19:53 5571、转发器(Exchanges) ... -
RabbitMQ学习(六)之远程过程调用(RPC)
2016-11-30 14:31 836在一般使用RabbitMQ做RPC很容易。客户端发送一个请求消 ... -
RabbitMQ能打开的最大连接数
2016-11-28 10:29 2573转自:http://blog.csdn.net/huoyuns ... -
RabbitMQ基础知识
2016-11-28 10:25 517Routing key由生产者指定。Binding key由消 ... -
RabbitMQ Consumer获取消息的两种方式(poll,subscribe)解析
2016-11-25 21:36 886rabbitMQ中consumer通过建立到queue的连接, ... -
解决RabbitMQ远程不能访问的问题
2016-11-24 15:18 1164刚刚安装的RabbitMQ-Server-3.3.5,并且 ... -
RabbitMQ用户角色及权限控制
2016-11-24 11:08 1752RabbitMQ:基本命令 rabbitmq的安装、启动和停 ... -
publish消息确认
2016-11-23 18:01 665Using standard AMQP, the only w ... -
rabbitMQ ConfirmListener
2016-11-23 15:53 2154消息消费者 操作步骤: 1. 创建连接工厂Connection ...
相关推荐
【RabbitMQ学习简单demo项目源码】是一个用于学习RabbitMQ基础概念和使用方法的实战项目。这个项目包含了RabbitMQ的各种模式示例,对于希望通过实践来掌握RabbitMQ的人来说是一个很好的起点。 RabbitMQ是基于AMQP...
**RabbitMQ安装使用——直接交换(direct exchange)** RabbitMQ是一款开源的...在实践中,还可以探索其他交换类型(如fanout, topic, headers)以及更高级的特性,如死信队列、持久化等,以适应不同应用场景的需求。
2. **交换器(Exchange)**:根据特定的路由键和类型(如direct、fanout、topic、headers)来决定消息应放入哪个队列。在"Send"代码中,生产者会指定交换器类型和路由键,确保消息正确分发。 3. **队列(Queue)**...
有多种类型的交换器,如direct、topic、fanout和headers。 4. **绑定**:绑定是将交换器和队列关联起来的规则,定义了消息如何从交换器流向队列。 5. **生产者**:生产者是发布消息到RabbitMQ的客户端应用。 6. *...
- **Custom(自定义)**:用户可以根据需求定义自己的交换器类型。 3. **消息确认机制** - **publisher confirms**:生产者确认,确保消息被 RabbitMQ 正确接收。 - **consumer acknowledges**:消费者确认,...
2. 创建交换机与队列:客户端可以创建交换机和队列,定义其类型(如direct、topic、headers或fanout)以及相关属性。例如,direct类型的交换机遵循简单的路由规则,将消息直接发送到匹配路由键的队列。 3. 发布消息...
消息中间件之RabbitMQ入门讲解”的主题中,我们将深入理解RabbitMQ的核心概念,如何通过控制台进行管理,以及如何在Spring Cloud框架下创建消息生产者和消费者。 首先,让我们了解RabbitMQ的基本概念。RabbitMQ的...
学习RabbitMQ,你需要了解AMQP协议的基础,熟悉RabbitMQ的安装和配置,掌握基本的生产者和消费者模型,理解各种交换机类型(如Direct、Fanout、Topic、Headers)和绑定机制,以及如何使用管理界面进行监控和管理。...
- **头部交换**:基于消息的headers属性进行路由。 - **扇出交换**:每个消息都会被发送到所有绑定的队列,无需路由键。 4. **RabbitMQ的管理**: - **命令行工具**:如`rabbitmqctl`用于管理节点、用户、权限、...
常见的交换器类型有direct、fanout、topic和headers。 - **路由键(Route Key)**:生产者发布消息时指定的字符串,用于匹配交换器的绑定规则。 - **绑定(Binding)**:绑定定义了交换器和队列之间的关系,即消息如何...
3. **声明交换机**:生产者需要声明交换机类型,例如direct、fanout、topic或headers,以及相关的绑定键。这决定了消息的路由方式。 4. **发布消息**:生产者通过通道向交换机发送消息,每个消息都携带一个路由键,...
延迟消息交换插件在RabbitMQ中的工作原理是创建一个特殊的交换机类型,即“x-delayed-message”。当你创建一个绑定并指定一个延迟时间时,消息会被放置在一个内部队列中,等待延迟时间过后才进入正常的消费流程。...
延迟消息交换基于RabbitMQ的自定义交换机类型,它扩展了标准的AMQP协议。在RabbitMQ中,交换机负责将发布者发布的消息路由到合适的队列。默认情况下,消息是立即发送的,但有了延迟交换,我们可以指定消息在多少毫秒...
生产者通常需要先声明交换机的类型,如`Direct`、`Fanout`、`Topic`或`Headers`,并设置其相关属性。 4. **声明队列**:队列是消息的实际存储位置。生产者可能需要声明一个或多个队列,指定其名称、是否持久化等...
- **AutoDelete**: 当没有任何队列或其他交换机绑定到此交换机时,该交换机会被自动删除。 - **Prefetch Count**: 控制消费者同时获取的消息数量,有助于平滑消息处理过程中的负载,提高效率。 #### 四、通过...
### RabbitMQ实战知识点详解 #### 一、RabbitMQ简介及背景 - **RabbitMQ开发语言**: Erlang,一种面向并发的编程...通过本文的学习,您可以掌握RabbitMQ的基本使用方法和核心概念,为后续深入学习打下坚实的基础。
常见的交换器类型有direct、fanout、topic和headers。 4. **声明队列**:创建一个或多个队列,队列是存储消息的地方,每个队列都有唯一的名称。 5. **绑定**:将交换器和队列关联起来,指定消息应该如何从交换器路由...
在实际应用中,我们可能需要处理更复杂的场景,如交换机类型(direct、fanout、topic、headers)、路由键、消息确认机制、批量消费等。此外,还可以利用RabbitMQ的高级特性,如工作队列、延迟消息、死信队列等,来...
RabbitMQ 提供多种消息模型,如 Direct、Fanout、Topic 和 Headers 等,可以根据实际需求选择合适的交换器类型来路由消息。在上述简单的示例中,使用了默认的 Direct 交换器,它将消息直接投递到指定的队列。 6. *...
- **绑定与交换器**:RabbitMQ 提供多种交换器类型,如 direct、fanout、topic 和 headers,以及绑定机制,灵活地控制消息路由。 总结来说,RabbitMQ 提供了一个强大且灵活的消息中间件平台,通过集群和队列镜像...