如何从 WSO2 MI 4.2 中的 RabbitMQ 入站端点消息中提取队列名称、优先级和消息 ID?

问题描述 投票:0回答:1

我目前正在使用 WSO2 Micro Integrator (MI) 4.2 开发一个项目,我在其中设置了一个入站端点来使用来自 RabbitMQ 的消息。在这种情况下,我需要从每条传入消息中提取特定的元数据,例如队列名称、优先级和消息 ID,并使用此信息来更新数据库中的消息状态。

这就是我想要实现的目标:

提取消费消息的队列名称。 检索消息的优先级。 获取消息ID。 更新数据库中使用的消息状态。 有人可以指导我如何在 WSO2 MI 4.2 的背景下实现这一目标吗?我特别寻求配置入站端点方面的帮助,以方便提取此元数据,然后在集成序列中对其进行处理。

任何代码片段、配置示例或相关文档的指针将不胜感激。

rabbitmq wso2 message-queue wso2-micro-integrator metadata-extractor
1个回答
0
投票

队列名称是从 RabbitMQ 连接属性中提取的,而不是从消息上下文中提取的。 队列名称是在建立连接和初始化消费者时设置的。它不是与每条消息关联的属性。因此,不可能使用属性表达式从单个消息中提取队列名称,并且优先级也类似。
例如,如果您需要在序列中使用队列名称,则可以在初始化注入序列时将其设置为序列的属性。以下是如何执行此操作的示例:

<sequence xmlns="http://ws.apache.org/ns/synapse" name="processMessage">
    <property name="QueueName" value="your_queue_name"/>
    <log level="custom">
        <property name="QueueName" expression="get-property('QueueName')"/>
        <property name="MessageID" expression="get-property('rabbitmq.message.id')"/>
    </log>
    <!-- Add your database update logic here -->
</sequence>

在上面的示例中,将“your_queue_name”替换为您的队列名称。这会将队列名称设置为序列的属性,然后您可以使用 get-property('QueueName') 表达式来检索它。

要更新数据库中的消息状态,您可以使用 DBReport 中介器。您需要在 Micro Integrator 中配置数据源,然后使用 DBReport 中介器更新数据库。

© www.soinside.com 2019 - 2024. All rights reserved.