我有一个由ESB(zato)调用的服务,该服务的作用是通过AMQP传出在rabbitMQ中发布消息,但是当我咨询rabbitMQ并生成get message时,答案是queue is空的。这个在扎托服役吗
from zato.server.service import Service
class HelloService(Service):
def handle(self):
# Request parameters
msg = 'Hello AMQP broker!'
out_name = 'My CRM connection'
exchange = 'My exchange'
routing_key = ''
properties = {'app_id': 'ESB'}
headers = {'X-Foo': 'bar'}
# Send a message to the broker
self.outgoing.amqp.send(msg, out_name, exchange, routing_key,
properties, headers)
从zato服务的rabbit队列中消费的完整工作示例如下:
在兔子身上
前三个步骤可以通过多种方式完成,下面是一个简单的python脚本,您可以使用它(只需安装kombu,然后单击):
以及设置文件:
^{pr2}$现在,让我们在一个新的virtualenv上使用python2.7创建运行上述脚本的队列:
复制上面的脚本
然后运行create_队列.py. 在
您可以使用cli工具或management plugin验证交换和队列是否在rabbit上:
现在zato部分(步骤4、5和6)可以使用公共api或webadmin来完成,我将向您展示如何使用公共api来完成它,但是通过UI来完成更容易,因为这只需要很少的时间。在
创建AMQP连接定义doc
为我们的AMQP连接设置密码doc
创建传出AMQP连接定义doc
最后发送消息的服务
如果要使用用户标识属性,它必须与连接用户标识相匹配,否则请求将失败。在
另外请注意,我在这里创建了一个死信交换,如果消息仍在
test.service.request
队列中,则消息将在30秒后发送到此处最后一步是测试
为了验证消息是否传递到队列,我们可以创建http/soap通道或直接调用服务,我使用公共api执行后者。在
之后,我们检查队列中是否有刚刚发送的消息:
记住检查rabbit和zato服务器日志,以防您仍然有任何问题。在
相关问题 更多 >
编程相关推荐