python 使用ActiveMQ

本文介绍了如何使用Python的stomp.py模块与ActiveMQ进行消息传递,并对比了队列(queue)与主题(topic)两种不同消息模式的特点及应用场景。
该文章已生成可运行项目,

1.首先安装stomp模块

https://pypi.org/project/stomp.py/#files

pip install stomp.py

2.查看官方文档

http://jasonrbriggs.github.io/stomp.py/quickstart.html

import time
import sys

import stomp

class MyListener(stomp.ConnectionListener):
    def on_error(self, frame):
        print('received an error "%s"' % frame.body)

    def on_message(self, frame):
        print('received a message "%s"' % frame.body)

conn = stomp.Connection()
conn.set_listener('', MyListener())
conn.connect('admin', 'password', wait=True)
conn.subscribe(destination='/queue/test', id=1, ack='auto')
conn.send(body=' '.join(sys.argv[1:]), destination='/queue/test')
time.sleep(2)
conn.disconnect()

3.本地安装ActiveMQ测试

安装参考:https://blog.youkuaiyun.com/Mr_haixin/article/details/80418204

其中报错参考:https://blog.youkuaiyun.com/gino725/article/details/78403303

这个错误,因为我本机账号不能修改所以使用上面的解决办法

实际上是用户连接有下划线,这里也贴到这:https://blog.youkuaiyun.com/qq_39056805/article/details/80749337

4.测试

5.区分queue和topic接收的区别试验

区别:https://blog.youkuaiyun.com/qq_21033663/article/details/52458305

  • Queue

 连续发送多个消息

 

 启动接收

import time
import sys

import stomp


class MyListener(stomp.ConnectionListener):
    def on_error(self, frame):
        print('received an error "%s"' % frame.body)

    def on_message(self, frame):
        print('received a message "%s"' % frame.body)


conn = stomp.Connection()
conn.set_listener('gaofan', MyListener())
conn.connect('admin', 'password', wait=True)
conn.subscribe(destination='/queue/test', id=1, ack='auto')

time.sleep(20)
conn.disconnect()

结果收到了我刚刚发送的两条消息

在看状态,两条消息已接收

 

 在程序运行期间发送消息,也能接收到。

  •  Topic

先启动程序

import time
import sys

import stomp


class MyListener(stomp.ConnectionListener):
    def on_error(self, frame):
        print('received an error "%s"' % frame.body)

    def on_message(self, frame):
        print('received a message "%s"' % frame.body)


conn = stomp.Connection()
conn.set_listener('gaofan', MyListener())
conn.connect('admin', 'password', wait=True)
conn.subscribe(destination='/topic/test', id=1, ack='auto')
time.sleep(20)
conn.disconnect()

在程序运行期间发送消息

 

 结果

 总结:

队列形式发送消息会保存,一旦消费者连接就能接收到

主题形式必须是连接期间才能收到发送的消息,不能保存

 

本文章已经生成可运行项目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值