基于RabbitMQ的Node.js和Python通信实例

陈晓猛

2016-10-02 发表于 2016-10-02 21:42 专题文章

导语:如今我们构建了整个互联网后端架构,跨语言通信需求非常多,比如原有的系统是用Java开发的,但是在一些非常适合Node.js发挥场景的地方又要使用Node.js来开发,而两者之间的通信方法也有多种,目前跨语言最流行和轻量级的通信方式就是用HTTP的RESTful,也可以选择性能更好的Thrift。

关于HTTP协议通信的优点和缺点,本文不做阐述,本文主要介绍如何通过RabbitMQ这个媒介,让Node.js和Python建立起通信的桥梁。

我们还是从最简单的入手 以Node.js端作为生产者,通过RabbitMQ消息队列发送一个Hello World,然后以Python端作为消费者,打印这个Hello World字符串。 把Python作为跨语言通信实例的语言,有几方面考虑。

Python是各个Linux流行的发行版本自带的语言,CentOs或Ubuntu都会 z在系统中预装Python语言,大部分是2.6.x或2.7.x版本,所以在Linux上运行这个实例就非常简单,不需要安装其他语言环境。 Python语言以简洁闻名,就算你没有任何Python基础,凭借其他语言 z的开发经验,仍然能够很轻松地读懂Python,所以没有接触过Python也没关系,看着代码大致是能够看懂流程的。 RabbitMQ官方提供的示例,默认就是Python语言,所以拿Python作为 z实例更贴切不过。

我们先看生产者Node.js的代码,套用第一个例子,保存为send.js。

接下来看看消费者Python的代码,在运行Python之前,需要安装Python的RabbitMQ连接客户端pika。我们分别执行如下命令,安装Python的Pip(和Node.js中的Npm一样,是包管理软件),然后通过Pip安装pika。

现在贴上Python端的代码,保存为receive.py,然后把它运行起来。
(1)引入pika包,和Node.js的require功能相同。
(2)建立连接,然后返回连接对象。
(3)声明一个频道channel,和Node.js的用法相同。
(4)对这个频道声明队列,对名字和Node.js声明的相同,都是hello。
(5)定义消费的回调函数,和Node.js定义回调函数相似,只不过Python不支持像Node.js那样的匿名函数写法,需要定义一个变量。
(6)声明消费。
(7)开始执行消费,这里也是类似事件循环的机制,当有消息推送到达时,就会触发消费事件,执行callback函数了。
(8)因为第7步进入了事件循环,所以第8步的打印信息永远不会被输出。

运行脚本和Node.js也一样,直接输入如下命令。
启动Node.js,向Python发送消息。
这时Python端就会收到信息,然后打印这条消息的内容。

通过这个简单的实例,我们可以扩散出很多利用RabbitMQ跨语言通信的消息队列,比如带路由的、带消费者响应的队列,等等。总之,有了RabbitMQ,跨语言异步通信将不再是问题了。

读者评论

相关博文

  • 社区使用反馈专区

    陈晓猛 2016-10-04

    尊敬的博文视点用户您好: 欢迎您访问本站,您在本站点访问过程中遇到任何问题,均可以在本页留言,我们会根据您的意见和建议,对网站进行不断的优化和改进,给您带来更好的访问体验! 同时,您被采纳的意见和建议,管理员也会赠送您相应的积分...

    陈晓猛 2016-10-04
    4692 705 3 7
  • 迎战“双12”!《Unity3D实战核心技术详解》独家预售开启!

    陈晓猛 2016-12-05

    时隔一周,让大家时刻挂念的《Unity3D实战核心技术详解》终于开放预售啦! 这本书不仅满足了很多年轻人的学习欲望,并且与实际开发相结合,能够解决工作中真实遇到的问题。预售期间优惠多多,实在不容错过! Unity 3D实战核心技术详解 ...

    陈晓猛 2016-12-05
    2883 35 0 1
  • czk 2017-07-29
    4654 28 0 1