RabbitMQ源码解析c++4----Routing
在构建日志记录系统教程中,源码我们学习了如何将日志消息广播给多个接收器,源码但并未提供根据消息严重性筛选的源码功能。本教程将对系统进行扩展,源码允许仅订阅特定严重性消息,源码如直接将关键错误消息定向至日志文件,源码网络电视电影源码同时保留控制台中的源码所有日志输出。
直接交换机(Direct Exchange)引入了灵活性,源码它根据消息的源码路由键与队列的绑定键完全匹配的原则进行消息路由。此实现中,源码我们使用直接交换机取代之前的源码扇出交换机。这样,源码发布到直接交换机的源码消息将根据其路由键被路由至与该键匹配的队列。
直接交换 X 在这里与两个队列绑定,源码其绑定键分别为橙色、源码黑色和绿色。linux 源码安装go橙色键的消息将被路由至队列 Q1,黑色或绿色键的消息将传递至队列 Q2。非匹配消息将被丢弃。
允许多个队列通过相同的绑定键进行绑定是合法的。以此为例,我们可以在 X 与 Q1 间添加一个绑定键为黑色的绑定,此时直接交换机的行为类似于扇出,将消息广播至所有匹配队列。黑色键的消息将同时传至 Q1 和 Q2。
在日志记录系统中,我们将消息发送至直接交换机而非扇出交换机,利用日志严重性作为路由键。这样,接收脚本能够选择接收特定严重性的日志。首先,vc 2012源码教程我们关注日志的发布。
为了实现这一模型,代码示例展示了在 RabbitMQ 队列系统中声明直接类型的交换器并发布消息。逐行解释如下:
在代码中,使用了 amqp_exchange_declare() 函数来声明一个交换机。该函数通过向 AMQP 服务器发送交换机声明请求来创建新的交换机或获取现有交换机的信息。函数的参数包括交换机名称、类型、持久化设置、自动删除等,根据需求创建适合的消息路由和分发。
amqp_cstring_bytes("direct") 函数用于将 C 风格字符串转换为 AMQP 字节序列,表示直连交换机的名称。此操作在 AMQP 库函数调用中使用。
amqp_queue_declare() 函数声明了一个消息队列,cgi源码是什么并将返回结果存储在 amqp_queue_declare_ok_t 类型的指针中。此操作用于创建新队列或获取现有队列的信息,并为后续操作提供队列属性和状态。
amqp_basic_consume() 函数启动消费者并订阅消息队列中的消息。此操作允许开始接收指定队列中的消息,并将结果以消费者标识存储。
amqp_consume_message() 函数用于接收订阅的消息,将消息存储在 amqp_message_t 类型的结构体中。此函数为阻塞调用,持续等待直至接收到消息,提供接收消息的包装信息。
RabbitMQç¬è®°åï¼MessageConverter详解
org.springframework.amqp.support.converter.MessageConverterMessage toMessage(Object object, MessageProperties messageProperties);
å°java对象åå±æ§å¯¹è±¡è½¬æ¢æMessage对象ã
Object fromMessage(Message message) throws MessageConversionException;
å°æ¶æ¯å¯¹è±¡è½¬æ¢æjava对象ã
å®ä¹Configç±»
MessageListenerAdapterä¸å®ä¹çæ¶æ¯è½¬æ¢å¨ï¼æ¶è´¹ç«¯æ¥æ¶çæ¶æ¯å°±ä»Messageç±»å转æ¢æäºStringç±»å
æ¶è´¹è å¤çæ¶æ¯çHandler
å¯å¨ç±»
å¯å¨åºç¨ç±»ï¼åéæ¶æ¯å° zhihao.miao.order éå,æ§å¶å°æå°ï¼
ä»æ§å¶å°æå°æ们ç¥éäºå¨æ¶è´¹è å¤çæ¶æ¯ä¹åä¼è¿è¡æ¶æ¯ç±»å转æ¢ï¼è°ç¨ TestMessageConverter ç fromMessage æ¹æ³ï¼ç¶åæ§è¡æ¶æ¯å¤çå¨ç onMessage æ¹æ³ï¼æ¹æ³åæ°å°±æ¯ String ç±»åã
èªå®ä¹ä¸ä¸ªMyBodyç±»åï¼å°æ¶æ¯ä»Message转æ¢æMyBodyç±»å
ç¶åä¿®æ¹ TestMessageConverter ç fromMessage æ¹æ³ï¼è¿åäº MyBody ç±»åï¼é£ä¹æ¶æ¯å¤çå¨çæ¶è´¹æ¹æ³ä¹æ¯MyBodyåæ°çæ¶è´¹æ¹æ³
æ¤æ¶çæ¶æ¯å¤çå¨ï¼å¤çå¨ä¸çæ¹æ³çå ¥åå°±æ¯MyBodyç±»åäºï¼
æ¤æ¶æ§å¶å°æå°ï¼
æ们è¿æµè¯å¦ä¸å¦æä¸ä½¿ç¨èªå®ä¹ç Converter ï¼é£ä¹å½æ¶æ¯çå±æ§ä¸å«æå±æ§content_typeçå¼ä¸ºtextï¼é£ä¹é»è®¤ç转æ¢æçjavaç±»åå°±æ¯Stringç±»åï¼å¦æä¸æå®é£ä¹é»è®¤ç转æ¢ç±»åå°±æ¯byte[]
æ们è·è¿å» MessageListenerAdapte rç setMessageConverter æ¹æ³ï¼
æ们åç°é»è®¤ç MessageConverter æ¯ SimpleMessageConverter ï¼æ们è¿å ¥ SimpleMessageConverter ç±»ä¸çå ¶é»è®¤ç转æ¢é»è¾
æºç åææ»ç»ï¼
1. MessageConverter å¯ä»¥æ java 对象转æ¢æ Message 对象ï¼ä¹å¯ä»¥æ Message 对象转æ¢æ java 对象
2. MessageListenerAdapter å é¨éè¿ MessageConverter æ Message 转æ¢æjava对象ï¼ç¶åæ¾å°ç¸åºçå¤çæ¹æ³ï¼åæ°ä¸ºè½¬æ¢æçjava对象ã
3. SimpleMessageConverter å¤çé»è¾ï¼
å¦æ content_type æ¯ä»¥textå¼å¤´ï¼åææ¶æ¯è½¬æ¢æ String ç±»å
å¦æ content_typeç å¼æ¯ application/x-java-serialized-object åææ¶æ¯åºåå为java对象ï¼å¦åï¼ææ¶æ¯è½¬æ¢æåèæ°ç»ã
Python-Pika连接rabbitmq(一)
Python中的Pika库详解:实现AMQP0-9-1协议的轻量级网络包工具
Pika是Python中用于与RabbitMQ进行通信的库,它专注于AMQP协议的实现,并且保持独立。安装Pika可以使用pip命令,java开源app源码或者直接在源代码目录下进行。
在处理RabbitMQ的双向RPC通信时,Pika利用异步连接适配器,如Tornado IOLoop,通过非阻塞的方式进行IO监听和事件处理。通过调用connection.ioloop.start(),开发者可以控制特定的IO loop。Pika异步接口支持回调函数,例如,在声明队列后,当RabbitMQ返回Queue.DeclareOk,会自动调用预设的回调方法。
在使用Pika时,认证是必不可少的。pika.credentials模块提供了方便的方法,允许你在创建ConnectionParameters对象时传递用户名和密码,以确保安全连接。
连接适配器参数的传递有两种方式:ConnectionParameters和URLParameters。前者是传统的参数方式,后者则通过URL格式简化设置,例如:'amqp://username:password@hostname:port/virtual_host'。
总的来说,Pika为Python程序员提供了一个简洁且灵活的工具,帮助他们高效地与RabbitMQ进行通信。通过理解并使用这些核心概念,开发者可以更顺利地在项目中集成和利用Pika。
RabbitMQ延迟消息:死信队列 | 延迟插件 | 二合一用法+踩坑手记+最佳使用心得
前言
整理了RabbitMQ延迟消息的重要技术点,包括死信队列和延迟插件的用法,以及最佳实践与常见坑点,以下是详细内容。
死信队列方式
死信队列本质是普通队列绑定死信交换机,配置固定,用于存放被拒绝或超时的消息。创建两个队列,分别设置为5s和min延迟,通过绑定死信交换机实现。
1、原理图解
2、引入MQ
3、声明交换机和队列
创建普通交换机、队列和绑定关系。通过绑定死信交换机,创建具有不同过期时间的死信队列。
4、yml配置
配置消息确认机制,演示消息投递情况。
5、创建生产者
添加消息唯一ID、确认机制。
6、创建消费者
监听死信队列。
7、测试接口
创建5s和min延迟的测试接口。
8、效果
展示延迟效果。
效果延迟插件方式
通过插件简化延迟队列创建,安装插件并配置延迟队列。
1、安装插件
提供源码和docker安装方法。
2、yml配置
配置中添加关键参数。
3、声明交换机和队列
设置延迟交换机。
4、消息处理器工具类
通过工具类设置持久化模式和延迟时间。
5、创建生产者
固定写法,配置延迟时间。
6、创建消费者
监听延迟队列。
7、测试接口
测试6s延迟消息。
8、效果
验证延迟效果。
踩坑手记
死信队列和延迟插件的常见问题,包括配置和版本兼容性。
最佳使用心得
推荐使用死信队列,注意延迟队列的使用场景和频率,交换机使用Direct模式。
总结
建议在安装RabbitMQ时一并安装延迟插件,推荐使用死信队列方式,避免频繁使用延迟队列,确保交换机使用Direct模式。
2024-11-23 07:25
2024-11-23 07:22
2024-11-23 06:24
2024-11-23 06:12
2024-11-23 06:10