`
iyuan
  • 浏览: 475836 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

关于python和rabbitmq的那点事儿

阅读更多

rabbitmq是一个消息中间件,在之前的zmq介绍中有略带提过。

由于zmq的硬伤(无法方便存储、监控中间过程),故而工作中一直都是使用的"兔子"。从1.7.0到现在的2.6.1版本(个人尝试过的),rabbitmq有着许多令人欣喜、惊叹的变化(或者说是进步)。

 

先来简单介绍下当前版本"兔子"的闪光点:

1.内置了ha,如果组建cluster,负载均衡之类的问题就无需担忧了。

2.可以设置队列镜像。(这算是呼声比较大的需求了,简单来说"再也不用担心单点的问题了")

 

虽然相对于zmq的去中心化,"兔子"的server端看起来比较臃肿,不过如果在同一个工作域中,完全可以所有的机器"统统连起来",于是乎,所有的消息交互对于上层代码而言就变成localhost交互了。底层传信交给"兔子",是不是对于普通coder而言,效果和zmq差不多了?

 

底层的东西是不错,下面要讲到上层的东西了。

 

"人生苦短,我用python"。

python的amqp库种类也着实不少。原来是amqplib一统天下的,后来由于原作者大半年没有更新(前段日子更新了一次,可惜只支持amqp0.8协议),现在"兔子“官方推荐链条的第一位是pika,这位兄台也算是很勤快了,不过迟迟没有出大版本号,目前版本停留在0.9.5,(时不时不变更版本号的更新一下)。

个人目前主要用kombu(基于amqplib的一个框架),但由于当前版本的amqplib并不能很好的支持"兔子"的第二个闪光点(队列镜像),所以pika自然就进入了眼帘(啥时候出大版本1啊)。后来又发现了amqpctl,可以控制队列等rabbitmqctl不支持的东东,蛮好用的,由于他也是基于amqplib的,所以我简单修改了一下,基于pika,这样就可以声明"队列镜像了",东西在附件给出,与第三方类库一样使用即可,不过要记得先安装pika。

 

注意:

如果用到附件,其中的镜像队列参数声明是这个样子的:

 

amqpctl --host x.x.x.x --declare-queue -q test --arguments '{"x-ha-policy":"nodes","x-ha-policy-params":["yournode"]}'

 官网参考在这:http://www.rabbitmq.com/ha.html#genesis

 目前还有一个问题:并不支持指定的node间的镜像,按照官方的说法是”静待下个版本“~

 

其实本来是想写个类似"吐槽"之类的东东,为了整“安全、备份,排除单点"可是折腾死哥了。以上,作为一个方案写在这儿,便宜乃们了!

 

1
1
分享到:
评论
4 楼 iyuan 2012-02-06  
guozhiwei 写道
我们这边在近期的一个项目中也采用的 rabbitmq的集群功能 和 镜像队列

我们这边在客户端处理rabbitmq结点挂了,自动更换其他节点, 你那边是怎么处理的呢?

这个是客户端与节点的断续重连了。实际用法上无非是自动重连。最简单的做法是客户端通过域名而不是ip连接节点,那么只要做域名转向就可以了,自动的问题,有两种解决方法:1.在客户端和节点间搭建类ha的中间件(个人感觉意义不明显,那玩意儿也会down,除非直接塞在客户端)。2.就是加强节点的监控了,down则自动调节dns域名转向什么的就可以(具体看场景和策略了)
希望可以有所帮助~
3 楼 guozhiwei 2012-02-03  
我们这边在近期的一个项目中也采用的 rabbitmq的集群功能 和 镜像队列

我们这边在客户端处理rabbitmq结点挂了,自动更换其他节点, 你那边是怎么处理的呢?
2 楼 iyuan 2011-11-15  
lynnkong 写道
不知兄台有没有对比过rabbitmq和activemq呢?

没有用过。天然对java怀有恐惧心理~
1 楼 lynnkong 2011-11-14  
不知兄台有没有对比过rabbitmq和activemq呢?

相关推荐

    RabbitMQ项目实战的讲解.pdf

    ### RabbitMQ项目实战知识点解析 #### 一、RabbitMQ简介与原理 **RabbitMQ** 是一个开源的消息中间件平台,它基于 **AMQP** (Advanced Message Queuing Protocol) 协议构建,并且使用 **Erlang** 语言编写。Erlang...

    learning_rabbitmq:我在学习有关RabbitMQ时编写的代码

    我不清楚的一件事是channel.wait()和connection.drain_events()之间的区别。 如果有人可以回答我,我将非常有义务:-) 另外,pyamqp中的connection.drain_events是否真的等同于pika的connection.process_data_...

    python日志实时打印多系统的软硬件使用率与温度

    例如,通过结合消息队列(如RabbitMQ或Kafka)和日志分析平台(如ELK Stack),可以构建一个高效的数据收集、分析和预警系统。利用这些集成工具,运维人员可以及时接收到系统异常的报警,快速进行故障定位和处理。 ...

    dummy-dockerized-microservices:为我尝试新工具(如 Docker 和 RabbitMQ)的虚拟项目

    Python 码头工人 nginx 兔子mq 微服务 卡桑德拉 这个应用程序有什么作用? 提供一个丑陋的 Web UI,用户可以在其中做两件事: 提交特定语言的新句子(英语、西班牙语等) 获取迄今为止已翻译成特定语言的所有...

    抽奖系统 摇奖系统

    8. **性能优化**:当参与人数众多时,系统需要处理高并发,这可能涉及到负载均衡、队列服务(如RabbitMQ或Kafka)和缓存策略(如Redis)。 9. **移动端适配**:对于手机APP,需要使用原生开发(如Android的Java或...

    架构设计文档

    - **消息队列**:RabbitMQ、Kafka等,处理异步任务和解耦系统。 4. **架构设计原则** - **单一职责**:每个组件只做一件事,避免复杂度。 - **开闭原则**:对扩展开放,对修改关闭,易于维护。 - **松耦合**:...

    驾校管理java源码-microservices:微服务

    服务应该有一个单一的目的(做一件事并且做好),松散耦合(彼此了解很少),并且具有高内聚性(将所有相关的功能和数据封装在一起)。 API、事件和文档! 大件 应用 管道 平台 应用 服务本身所在的地方... 大件 ...

    协同办公平台项目需求规格说明书.docx

    ### 协同办公平台项目需求规格说明知识点解析 #### 一、引言 - **编写目的**:明确项目目标,确保所有参与者对项目的理解和期望一致。 - **背景**:随着信息技术的发展,协同办公的需求日益增长,高效、智能的办公...

Global site tag (gtag.js) - Google Analytics