Python连接ActiveMQ的操作

安装操作库

pip install stomp.py

 

基本写法:

 
  1. # -*-coding:utf-8-*-

  2. import stomp

  3. import time

  4.  
  5.  
  6. queue_name = '/queue/SampleQueue'

  7. topic_name = '/topic/SampleTopic'

  8. listener_name = 'SampleListener'

  9.  
  10. class SampleListener(object):

  11. def on_message(self, headers, message):

  12. print 'headers: %s' % headers

  13. print 'message: %s' % message

  14.  
  15. # 推送到队列queue

  16. def send_to_queue(msg):

  17. conn = stomp.Connection10([('127.0.0.1',61613)])

  18. conn.start()

  19. conn.connect()

  20. conn.send(queue_name, msg)

  21. conn.disconnect()

  22.  
  23. #推送到主题

  24. def send_to_topic(msg):

  25. conn = stomp.Connection10([('127.0.0.1',61613)])

  26. conn.start()

  27. conn.connect()

  28. conn.send(topic_name, msg)

  29. conn.disconnect()

  30.  
  31. ##从队列接收消息

  32. def receive_from_queue():

  33. conn = stomp.Connection10([('127.0.0.1',61613)])

  34. conn.set_listener(listener_name, SampleListener())

  35. conn.start()

  36. conn.connect()

  37. conn.subscribe(queue_name)

  38. time.sleep(1) # secs

  39. conn.disconnect()

  40.  
  41. ##从主题接收消息

  42. def receive_from_topic():

  43. conn = stomp.Connection10([('127.0.0.1',61613)])

  44. conn.set_listener(listener_name, SampleListener())

  45. conn.start()

  46. conn.connect()

  47. conn.subscribe(topic_name)

  48. while 1:

  49. send_to_topic('topic')

  50. time.sleep(3) # secs

  51.  
  52. conn.disconnect()

  53.  
  54. if __name__=='__main__':

  55. # send_to_queue('len 123')

  56. # receive_from_queue()

  57.  
  58. receive_from_topic()

 

发送数据到队列

发送端

 
  1. import stomp

  2. import time

  3.  
  4. # 通过调用stomp下的Connection10方法,创建连接,指定ip和端口

  5. conn = stomp.Connection10([("47.dsadsa74.89", 61613)])

  6. # 启动,连接创建完成

  7. conn.start()

  8. # 但是activemq是需要账号密码的,因此这里连接到指定用户上面

  9. conn.connect(username="admin", passcode="admin", wait=True)

  10.  
  11. # 发送消息

  12. for i in range(10):

  13. # 第一个参数:队列的名称

  14. # 第二个参数:消息的内容

  15. conn.send("queue1", f"message1:{i}")

  16. time.sleep(3)

  17.  
  18. # 断开连接

  19. conn.disconnect()

接收端

 
  1. import stomp

  2.  
  3.  
  4. class SampleListener(stomp.ConnectionListener):

  5. def on_message(self, headers, message):

  6. # headers是一个字典,里面很多内容,是一个字典,headers['destination']是对应的队列名称

  7. print(f"headers:{headers['destination']}, message:{message}")

  8.  
  9. def on_error(self, headers, message):

  10. print(f"headers:{headers['destination']}, message:{message}")

  11.  
  12.  
  13. # 同样创建一个连接

  14. conn = stomp.Connection10([("47.9dsad.89", 61613)])

  15. # 绑定监听器,我们这里只有一个,所以名字什么的无所谓

  16. conn.set_listener("", SampleListener())

  17. # 启动

  18. conn.start()

  19. # 连接到指定用户

  20. conn.connect(username="admin", passcode="admin", wait=True)

  21. # 订阅到指定的队列,这个要和发送端发送的队列保持一致

  22. # 当发送端有消息过来时,消息的内容会自动传递到SampleListener类下的on_message的message参数里。headers则包含了一些额外信息,比如时间戳、队列名等等

  23. # 当然,如果有错误就会传到on_error中,不过这里没有定义,可以的话定义一下也是好的,参数和on_message是一样的

  24. conn.subscribe("queue1")

  25.  
  26. # 让程序不停下,不然程序立马就结束了

  27. while True:

  28. pass

  29. """

  30. headers:/queue/queue1, message:message1:0

  31. headers:/queue/queue1, message:message1:1

  32. headers:/queue/queue1, message:message1:2

  33. headers:/queue/queue1, message:message1:3

  34. headers:/queue/queue1, message:message1:4

  35. headers:/queue/queue1, message:message1:5

  36. headers:/queue/queue1, message:message1:6

  37. headers:/queue/queue1, message:message1:7

  38. headers:/queue/queue1, message:message1:8

  39. headers:/queue/queue1, message:message1:9

  40. """

 

同时指定多个消费者

发送端

 
  1. import stomp

  2.  
  3. conn = stomp.Connection10([("47.94dasd.89", 61613)])

  4. conn.start()

  5. conn.connect(username="admin", passcode="admin", wait=True)

  6.  
  7. for i in range(10):

  8. conn.send("queue1", f"message1:{i}")

  9. conn.send("queue2", f"message2:{i}")

  10.  
  11. conn.disconnect()

接收端1

 
  1. import stomp

  2.  
  3.  
  4. class SampleListener(stomp.ConnectionListener):

  5. def on_message(self, headers, message):

  6. print(f"headers:{headers['destination']}, message:{message}")

  7.  
  8. def on_error(self, headers, message):

  9. print(f"headers:{headers['destination']}, message:{message}")

  10.  
  11.  
  12. conn = stomp.Connection10([("47.dasdas4.89", 61613)])

  13. conn.set_listener("", SampleListener())

  14. conn.start()

  15. conn.connect(username="admin", passcode="admin", wait=True)

  16. conn.subscribe("queue1")

  17.  
  18. while True:

  19. pass

接收端2

 
  1. import stomp

  2.  
  3.  
  4. class SampleListener(stomp.ConnectionListener):

  5. def on_message(self, headers, message):

  6. print(f"headers:{headers['destination']}, message:{message}")

  7.  
  8. def on_error(self, headers, message):

  9. print(f"headers:{headers['destination']}, message:{message}")

  10.  
  11.  
  12. conn = stomp.Connection10([("47.9dasdsa89", 61613)])

  13. conn.set_listener("", SampleListener())

  14. conn.start()

  15. conn.connect(username="admin", passcode="admin", wait=True)

  16. conn.subscribe("queue1")

  17.  
  18. while True:

  19. pass

 

参考:

https://www.cnblogs.com/traditional/p/11144123.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值