• ActiveMQ:使用Python访问ActiveMQ


    Windows 10家庭中文版,Python 3.6.4,stomp.py 4.1.21

    ActiveMQ支持Python访问,提供了基于STOMP协议(端口为61613)的库。

    ActiveMQ的官文Cross Language Clients中给出了更详细的介绍,并附有示例代码,如下图:

    第一行为常规Python访问,第二行为使用Jython访问的方式,四个操作。

    Python访问ActiveMQ需要使用stomp.py,见其官网

    下载官网的代码,解压,命令行进入其目录,使用pyhthon setup.py install即可安装好,然后就可以使用stomp.py了。

    官方示例代码:给队列test发送一个消息,也可以把第7行的destination的“/queue/”去掉,只剩test。

    1 import stomp
    2 
    3 conn = stomp.Connection()
    4 conn.set_listener('', MyListener())
    5 conn.start()
    6 conn.connect('admin', 'password', wait=True)
    7 conn.send(body=' '.join(sys.argv[1:]), destination='/queue/test')
    8 conn.disconnect()

    测试结果:test队列接收到消息数量增加了

    stomp.Connection()默认是connect.StompConnection11(协议1.1),还可以可以选择1.0、1.2。

    在官方代码中,stomp.Connection()的参数为空,实际上可以有很多参数,比如,设置Broker的IP地址和端口,如下:其中的host_and_ports就是设置IP和端口的。

    IP和端口设置示例:

    c = stomp.Connection([('127.0.0.1', 62613)])

    这里我犯错了,端口我协程了8161(ActiveMQ的Web访问的端口),经查询(百度搜索到stackoverflow.com)才知,STOMP协议用的是61613(ActiveMQ的配置文件中):

    ActiveMQ官网的四个测试:

    发送消息到队列Queue属于 点对点模式,不可以重复消费;

    发送消息到主题Topic属于 发布/订阅模式,可以重复消费;

     1 # Send a Message to an Apache ActiveMQ Queue 
     2 import stomp
     3  
     4 conn = stomp.Connection10()
     5  
     6 conn.start()
     7  
     8 conn.connect()
     9  
    10 conn.send('SampleQueue', 'Simples Assim')
    11  
    12 conn.disconnect()
    13 
    14 # Receive a Message from an Apache ActiveMQ Queue
    15 import stomp
    16 import time
    17  
    18 class SampleListener(object):
    19   def on_message(self, headers, msg):
    20     print(msg)
    21  
    22 conn = stomp.Connection10()
    23  
    24 conn.set_listener('SampleListener', SampleListener())
    25  
    26 conn.start()
    27  
    28 conn.connect()
    29  
    30 conn.subscribe('SampleQueue')
    31  
    32 time.sleep(1) # secs
    33  
    34 conn.disconnect()
    35 
    36 # Send a Message to an Apache ActiveMQ Topic 
    37 import stomp
    38  
    39 conn = stomp.Connection10()
    40  
    41 conn.start()
    42  
    43 conn.connect()
    44  
    45 conn.send('/topic/SampleTopic', 'Simples Assim')
    46  
    47 conn.disconnect()
    48 
    49 # Receive a Message from an Apache ActiveMQ Topic (1)
    50 import stomp
    51 import time
    52  
    53 class SampleListener(object):
    54   def on_message(self, headers, msg):
    55     print(msg)
    56  
    57 conn = stomp.Connection10()
    58  
    59 conn.set_listener('SampleListener', SampleListener())
    60  
    61 conn.start()
    62  
    63 conn.connect()
    64  
    65 conn.subscribe('/topic/SampleTopic')
    66  
    67 time.sleep(1) # secs
    68  
    69 conn.disconnect()
    70 
    71 # Receive a Message from an Apache ActiveMQ Topic (2)
    72 import stomp
    73 import time
    74  
    75 class SampleListener(object):
    76   def on_message(self, headers, msg):
    77     print(msg)
    78  
    79 conn = stomp.Connection10()
    80  
    81 conn.set_listener('SampleListener', SampleListener())
    82  
    83 conn.start()
    84  
    85 conn.connect(headers={'client-id':'SampleClient'})
    86  
    87 conn.subscribe(destination='/topic/SampleTopic', headers={'activemq.subscriptionName':'SampleSubscription'})
    88  
    89 time.sleep(1) # secs
    90  
    91 conn.disconnect()

    参考

    什么是分布式消息中间件?

    ActiveMQ-为什么需要消息中间件?

    消息队列的两种模式

    消息队列使用的四种场景介绍

  • 相关阅读:
    寻找两个正序数组的中位数
    06Go语言数组和切片
    缺失的第一个正数
    linux 学习笔记001
    MyBatisPlus使用
    MyBatis(六)MyBatis使用事务
    Spring学习(八)Spring集成Log4J日志
    Spring学习(五)Spring 基于注解装配Bean
    使用Azure DevOps 进行 docker .net core 自动部署
    MyBatis(五)MyBatis动态SQL
  • 原文地址:https://www.cnblogs.com/luo630/p/9188107.html
Copyright © 2020-2023  润新知