只需要下面简单的几行代码,我们就可以把我们本地数据发送到 ActiveMQ 上面去。
def send_mq(data):
hosts = [(AMQHOST, AMQPORT)]
conn = stomp.Connection(host_and_ports=hosts, auto_content_length=False)
conn.connect(username=AMQUSER, passcode=AMQPASS, wait=True)
conn.send(body=json.dumps(data), destination=TOPICNAME)
conn.disconnect()
上面需要根据你自己的服务器配置情况配置参数。
为什么使用消息不使用 API 调用
在跨平台数据交换的时候,我们其实有很多可以实现的方法。
我们可以构建一个 API 服务器,让不同的客户端调用不同的端口来实现数据交换。
我们也可以使用消息服务器,让不同的工具获得自己的数据后发送约定好的数据格式到消息服务器上,然后让我们后台部署的数据服务器来从消息服务器上获得数据并且进行处理。
使用消息服务器的好处是显而易见的,当有多个客户端的时候,我们可以通过消息服务器来作为缓存。
非常重要的一个作用就是解耦。
用户的数据只负责获得数据,比如说我们常用的例子,我们会使用不同的工具来做爬虫程序。
当爬虫获得数据后,爬虫程序将会把已经获得数据组装成消息,然后发送到消息服务器上。
相比较我们让爬虫程序直接调用接口,这样的耦合度更低。
爬虫程序不需要了解接口是怎么定义的,只需要发送我们约定好的数据格式就行。
同时假设我们有多个爬虫程序的话,多个程序的 API 调用将会对后端的 API 程序造成负载,而且爬虫程序的启动时间是不一样的,有可能短期有大量的数据涌入,这样我们可以通过消息服务器让程序自动运行,当没有消息的时候,后端程序属于空闲,可以消费积压的消息。
当大量消息涌入的时候,因为消息服务器的消峰功能,不会让后端的数据处理程序出现问题,保持更好的吞吐量。
Python 通过 stomp 发送消息到 ActiveMQ 的代码 - Python - iSharkFly