2022
我们一起努力

Rhapsody中AMQP通讯点连接 - RabbitMQ使用介绍

什么是MQ消息队列

MQ的全称是Message Queue,即消息队列。 消息队列是消息传输过程中存储消息的容器,是典型的生产者-消费者模型。 生产者不断向消息队列生产消息,消费者不断从队列中获取消息。 通过消息队列的使用,我们可以轻松实现应用程序解耦、任务异步处理、流量调峰等。

目前主流的MQ实现方式有两种:AMQP和JMS。 Rhapsody 还提供了两种类型的通信点,AMQP 和 JMS,以提供支持。 我们可以在IDE中进行便捷的开发,快速响应各种医疗业务场景的需求。

AMQP协议介绍

AMQP是高级消息队列协议(Advanced Message Queuing Protocol)的缩写。 它是一个提供统一消息服务的应用层标准高级消息队列协议。 它是应用层协议的开放标准,专为面向消息的中间件而设计。

今天我们就来看看 Rhapsody 中 AMQP 通信点的使用,通过它我们可以连接到高级消息队列协议 (AMQP) broker 实现,例如 Amazon MQ、Azure Service Bus 和 RabbitMQ,它们可以用来发送和发送消息。从 AMQP 代理接收 AMQP 消息。 目前Rhapsody中的AMQP通信点提供了两个协议版本,0.9.1和1.0。 下面以RabbitMQ为例,演示如何在Rhapsody中配置和使用它。

RabbitMQ简介

RabbitMQ采用erlang语言开发,支持多种通信协议,包括AMQP0-9-1、AMQP 1.0、MQTT和STOMP。 其中,最重要和常用的是AMQP 0-9-1(默认)。 感兴趣的小伙伴可以登录RabbitMQ官方地址下载学习。

下图展示了基于AMQP 0-9-1模型的RabbitMQ的基本结构和工作流程:Producer会和Broker建立Connection,通过Channel通道将消息发送给Exchange交换机,Exchange交换机会根据在 Exchange 类型和配置的 routingKey 指示的路由规则中将消息转发到 some/some Queue 队列绑定。 最后Consumer从listeningQueue队列中获取消息后进行消费。

组件说明:

(1)虚拟主机(Virtual Host):一批交换机、消息队列和相关对象。 虚拟主机是共享相同身份验证和加密环境的独立服务器域。 客户端应用程序登录到服务器后,可以选择一个虚拟主机。

(2) Broker:表示消息队列服务器实体。

(3)Exchange:消息队列交换机,将消息路由按照一定的规则转发到某个/某个队列,并对消息进行过滤。

(4)Queue:消息队列,FIFO(First In First Out)队列,用于存储消息的队列。

(5)Binding定义了Exchange和Queue之间的关联,并提供了路由规则。

(6)连接:网络连接,如TCP/IP套接字连接。

(7)Channel:多路复用连接中独立的双向数据流通道。 为会话提供物理传输介质。

(8)Producer:消息生产者,生产消息。

(9)Consumer:消息消费者,接收MQ转发过来的消息进行消费。

开关类型

Exchange交换机本质上是一种路由算法,通过分析发布消息时指定的routingKey或headers,从与其绑定的Queue列表中找到匹配的队列进行消息转发。

为了适应不同的路由情况,RabbitMQ基于AMQP 0-9-1定义了几种类型的消息发送和接收模型。 常用的有Direct、Fanout、Topic、Header,对应不同的路由算法。

1. DirectExchange(直接交换)&工作原理

直接交换背后的路由算法很简单,消息进入其绑定键与消息的路由键完全匹配的队列。

在上图中的设置中,可以看到直连交换机X绑定了两个队列Q1和Q2。 Q1队列使用绑定键routingKey=orange进行绑定,Q2队列有两个绑定,一个使用绑定键routingKey=black,另一个使用绑定键routingKey=green。

在这样的设置中,发布到 routingKey=orange 的交换器的消息将被路由到队列 Q1。 带有 routingKey=orange 或 routingKey=black 路由键的消息将被发送到 Q2。 所有其他消息将被丢弃。

2. FaoutExchange(粉丝交换)&工作原理

fan-out exchange很简单,路由算法没有路由指标,它会将消息转发给所有绑定到它的Queue。 通常它用于实现发布/订阅场景。

Queue绑定Faout Exchange时不需要指定routingKey参数。 消息生产者向 Faout Exchange 发布消息时不需要指定 routingKey 参数。

上图中,扇形开关X会同时将消息转发给与其绑定的Queue。

3. TopicExchange(话题交换)&工作原理

topic exchange中的绑定键routingKey必须是一个单词列表,它的值通常是多个单词,用“.”分隔。 通配符 # 或 * 用于模糊匹配。

一种。 #:匹配零个或多个单词。

b. *:匹配一个词。

这些词可以是任何东西,但通常它们指定与消息相关的一些特征。 路由键中可以有任意数量的字,最多 255 个字节。

当 Topic Exchange 收到消息时,会执行如下路由算法:

一种。 读取 routingKey 值。

b. 遍历绑定列表,找到所有匹配 routingKey 的 Queues。

C。 将消息转发到匹配的队列。

在上图中,创建了三个绑定。 Q1队列绑定了绑定键“*.orange.*”,Q2队列绑定了“*.*.rabbit”和“lazy.#”。 例如,路由键设置为“quick.orange.rabbit”的消息将被传递到两个队列。 消息“lazy.orange.elephant”也会被发送到两个队列Q1和Q2。 另一方面,“quick.orange.fox”只会进入Q1队列,而“lazy.brown.fox”只会进入Q2队列。 “lazy.pink.rabbit”只会被传递到第二个队列一次,即使它匹配两个绑定。 而“quick.brown.fox”、“orange”或“quick.orange.male.rabbit”不匹配任何绑定,因此这些消息将被丢弃。

4. Headers Exchange(头部交换)&工作原理

headers类型的交换不依赖RoutingKey的匹配规则来路由消息,而是根据发送消息内容中的headers属性进行匹配。 通过 Rhapsody 中的输出标头配置。

Queue绑定Headers Exchange时,需要指定argument作为匹配条件,其值为key-value键值对。 当存在多个key-value键值对时,可以使用x-match指定多条件匹配关系:

一种。 all:所有key-value键值对必须匹配才能转发,即匹配条件之间是“与”的关系。 默认值。

b. any:只要有key-value键值对匹配就转发,即匹配条件之间的关系是“或”。

Publisher 在向 Headers Exchange 发布消息时需要指定 headers,此时不需要添加 x-match。 当 headers Exchange 收到消息时,它会执行以下路由算法:

1)读取请求头。

2) 遍历绑定列表并读取绑定参数。

3)判断绑定参数的x-match值:

一种。 all or no declaration of x-match:如果绑定参数中的所有key-value在请求头中都存在且匹配,则成功; 否则,它将失败。

b. any:只要请求头中存在的绑定参数中有key-value键值对并且匹配成功,则绑定到该参数的所有key-value键值对都不存在或不匹配在请求标头中失败。

4) 转发消息到匹配的Queue。

RhapsodyAMQP 通信点实例

1、使用Rhapsody中的AMQP通信点作为消息消费者(以Direct Exchange为例)

1. 在 RabbitMQ 中创建一个 VirtualHost 并将其命名为“test_Virtual_Host”。

2. 创建一个名为“test_queue”的队列。

3. 创建交换机连接到任意官方服务器失败,名称为“amq.direct”,以direct型交换机为例进行测试。

4.“amq.direct”exchange通过routingKey="routingKeyTest"绑定到"test_queue"队列。

5.在Rhapsody中搭建一个消息消费者测试工程。

6、AMQP消费者通信点中具体配置如下,选择输入方式,填写账号、密码、连接Rabbit MQ的默认端口5672、虚拟主机Virtual Host、队列名称即可被连接。 在 InputBasic Properties 中设置的队列中的消息属性成为 Rhapsody 中的消息属性。 需要注意的是,这里的MQ消息属性是固定的一组属性,而不是我们随意设置的。 MQ 在发送和接收时将忽略不合适的属性。

内置消息属性如下:

7、在RabbitMQ的UI管理页面创建测试消息,如下图,点击“publishmesssage”按钮后,消息会路由后发送到“test_queue”队列,与“AMQP消费者通信点” ”在rhapsody中会监听“test_queue”队列获取消息进行消费。

8.引擎监控页面收到的消息。

2.使用Rhapsody中的AMQP通信点作为消息生产者(以Direct Exchange为例)

1.在Rhapsody中搭建消息生产者测试工程。

2、AMQP消费者通信点具体配置如下,选择输出方式,填写账号,密码,连接RabbitMQ的默认端口5672,虚拟主机Virtual Host连接到任意官方服务器失败,连接的交换机名称,以及routingKey的值(这里我们以“amq.direct”开关为例进行测试)。 在 OutputBasic Properties 中,您可以将 Rhapsody 中的消息属性设置为队列中的消息属性。

在Rhapsody中设置消息属性,如上图所示,以便后面在OutputBasic Properties配置中可以将这些属性设置为MQ消息的属性。

3. 在Rhapsody 的监控页面查看测试消息。 Rhapsody 作为消息生产者,通过“AMQP 消费者通信点”将消息发送到 RabbitMQ 中的“amq.direct”开关。 “amq.direct”交换机根据 routingKey=routingKeyTest 将消息路由到“test_queue”队列。

4.在RabbitMQ UI管理页面的“test_queue”队列中查看Rhapsody发送的消息。

以上,我们介绍了Rhapsody中AMQP通信点与RabbitMQ消息交互的配置。 如果您想了解更多,请联系rhapsody技术支持china.office@lyniate.com,谢谢!

【关于丽妮特】

LYNIATE是Rhapsody(原Orion Health Rhapsody)和Corepoint这两家在全球医疗信息互联领域久经考验的医疗信息化公司,本着资源互补、优势共享的原则,共同创立的全新品牌。 两大行业领先品牌强强联手,将技术、人才和良好的客户关系动态结合,将彼此的产品和服务有机融合,形成协同效应,为用户提供更优质的产品、服务和行业领先的医疗信息互联互通和互通解决方案,创造更大价值。

面对新一代医疗信息化的发展需求,Rhapsody与Corepoint的合作将为LYNIATE在医疗信息化领域的高端产品研发奠定坚实的基础,提升其在医疗信息化领域技术应用的领先地位。行业。 新品牌的成立也将为其在中国医疗信息化行业的进一步发展提供强有力的技术支持,引领其集成引擎细分市场,为中国医疗行业用户提供更高品质的产品和完善的服务保障。

– Corepoint 和 Rhapsody 的新家。

赞(0)
文章名称:《Rhapsody中AMQP通讯点连接 - RabbitMQ使用介绍》
文章链接:https://www.fzvps.com/56713.html
本站文章来源于互联网,如有侵权,请联系管理删除,本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
图片版权归属各自创作者所有,图片水印出于防止被无耻之徒盗取劳动成果的目的。

评论 抢沙发

评论前必须登录!