AMQP,即Advanced Message Queuing Protocol(高级消息队列协议),一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计,基于此协议的客户端与消息中间件传递消息,不受客户端/中间件不同产品、不同开发语言等条件的限制。该协议是一种二进制协议,提供客户端应用于消息中间件之间异步、安全、高效的交互。相对于我们常见的REST API,AMQP更容易实现,可以降低开销,同时灵活性高,可以轻松的添加负载平衡和高可用性的功能,并保证消息传递,在性能上AMQP协议也相对更好一些。
通俗来说,在异步通讯中,消息不会立刻到达接收方,而是被存放到一个容器中,当满足一定的条件之后,消息会被容器发送给接收方,这个容器即消息队列,而完成这个功能需要双方和容器以及其中的各个组件遵守统一的约定和规则,AMQP就是这样的一种协议,消息发送与接收的双方遵守这个协议可以实现异步通讯。这个协议约定了消息的格式和工作方式。
消息(Message):即客户端与消息中间件传送的数据。
生产者(Producer):消息生产者。
消费者(Consumer):消息消费者。
连接(Connection):一个网络连接,比如TCP/IP连接。AMQP连接通常是长连接,当一个应用不再需要连接到AMQP代理的时候,需要释放掉 AMQP 连接,而不是直接将TCP连接关闭。
信道(Channel):网络信道,是建立在Connection连接之上的一种轻量级的连接,可以创建多个信道。
交换机(Exchange):接收消息,并将消息路由转发给消息队列。
虚拟主机(Virtual Host):进行逻辑隔离,一个虚拟主机可以创建若干个交换机和队列。
绑定(Binding):交换机和队列之间的虚拟连接。
路由键(Routing Key):路由规则,虚拟机可以用来确定如何路由一个特定的消息。
队列(Queue):存储即将被消费者消费掉的消息。
中间件(Broker ):实现AMQP实体服务,比如常见的RabbitMQ、Azure Service Bus等。
工作过程
1.生产者发布消息,经由交换机。
2.交换机根据路由规则将收到的消息分发给与该交换机绑定的队列。
3.最后消息中间件会将消息投递给订阅了此队列的消费者,或者消费者按照需求自行获取。
知行之桥EDI系统提供了AMQP端口,用来支持创建AMQP客户端进行连接各种消息中间件。使用AMQP端口主要分两种:一种是作为生产消息的客户端,将消息发送到消息中间件;一种是消费消息的客户端,负责消费消息中间件指定队列中的消息。以下将以AMQP端口配置连接到RabbitMQ为例,介绍如何使用知行之桥中的AMQP端口:
1.创建一个AMQP端口
2.创建连接
点击端口settings页面连接Connection后的创建Create按钮,创建连接
3.配置
(1)配置消息队列名称
(2)配置操作为Produce,表示生产消息
4.连接测试
5.发送消息到消息中间件
在Input页面上传待发送的数据文件,这里支持传送任意格式的数据文件:
上传到中间件的数据是Base64编码的:
配置一个消费消息的AMQP客户端
1.创建一个AMQP端口(同上)
2.创建连接(同上)
3.配置
(1)配置消息队列名称
注意:这里配置的队列名称如果和刚刚配置的生产消息的客户端中配置的队列名称一样,则在知行之桥中表现为自发自收,即通过知行之桥生产的消息上传到中间件后,会通过该消费消息的客户端获取消息
(2)配置操作为Consume,表示消费消息
4.连接测试
5.消费消息
AMQP端口可以自动消费连接的消息中间件队列中的消息,中间件也可以推送消息到知行之桥,被知行之桥AMQP端口消费的消息显示在该端口的Output页面。
拓展
以上操作,都是以AMQP端口配置连接到RabbitMQ为例,如果您需要连接到Azure的 Service Bus,如何在知行之桥的AMQP端口进行配置呢。
1.在Azure门户网站创建Service Bus的namespace,并记下该namespace的name和Resource group,如下图中namespace的name为:nsoftware.servicebus.windows.net,Resource group为ServiceBusTest。
2.端口:在Azure的 Service Bus中非TLS默认使用的端口是5672,TLS使用的端口是5671。
3.创建队列(Queue),记下队列的名称,比如此时创建的队列名称为AMQPTEST。
4.在您创建namespace时,会生成一对Primary Key和Secondary Key的RootManageSharedAccessKey,可在Setting→Shared access policies中查看
Azure的Service Bus中的用户就是RootManageSharedAccessKey,密码使用Primary Key或者Secondary Key其中一个
5.在知行之桥AMQP端口中配置: 创建连接:
配置连接、队列和操作
更多 EDI 信息,请参阅: EDI 是什么?