【问题标题】:Dynamically selecting a RabbitMq queue in Exchange using spring integration使用 spring 集成在 Exchange 中动态选择 RabbitMq 队列
【发布时间】:2013-07-19 23:15:41
【问题描述】:

我必须从生产者向 RabbitMQ Exchange 发送消息。此消息将包含特定属性,例如队列名称,基于此属性,我必须动态决定发送此消息的队列。[从交换绑定的队列,发送此特定消息]。

有什么方法可以拦截到达 RabbitMQ Exchange 的消息,使用 spring 集成,目前,我有以下 spring 集成配置文件。

我不知道如何创建一个 bean 来获取 Exchange 消息并将消息路由到 smsQueue、emailQueue 等队列。

感谢您的建议和回复。

http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/rabbit http://www.springframework.org/schema/rabbit/spring-rabbit-1.0.xsd

http://www.springframework.org/schema/integration         
http://www.springframework.org/schema/integration/spring-integration.xsd      
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/integration/amqp
http://www.springframework.org/schema/integration/amqp/spring-integration-amqp.xsd
">

<context:annotation-config></context:annotation-config>
<context:component-scan base-package="com.rabbit"></context:component-scan>

<rabbit:connection-factory id="connectionFactory"
    host="localhost" username="guest" password="guest" />   
<rabbit:admin connection-factory="connectionFactory" />
<rabbit:template id="exchnageTemplate"
    connection-factory="connectionFactory" exchange="COMMUNICATION-EXCHANGE" />

<rabbit:queue id="smsQueue" auto-delete="true" durable="false" />
<rabbit:queue id="emailQueue" auto-delete="true" durable="false" />
<rabbit:queue id="dvbQueue" auto-delete="true" durable="false" />
<rabbit:queue id="pbxQueue" auto-delete="true" durable="false" />
<rabbit:queue id="medsensorQueue" auto-delete="true"
    durable="false" />


<int:gateway id="gateway" service-interface="com.rabbit.mq.ProducerGatewayInterface"
    default-request-channel="producerChannel" />

<int:channel id="producerChannel" />
<int:channel id="errorChannel" />

<bean id="communicationInterface" class="com.rabbit.mq.CommunicationInterface" />

<amqp:outbound-channel-adapter channel="producerChannel"
    amqp-template="exchnageTemplate" exchange-name="COMMUNICATION-EXCHANGE">
    <int:service-activator input-channel="input"
        ref="communicationInterface" method="optimalRoutingOfMessage" />
</amqp:outbound-channel-adapter>

【问题讨论】:

    标签: spring rabbitmq spring-integration integration spring-rabbit


    【解决方案1】:

    使用 RabbitMQ (AMQP),您无需发送到队列,而是使用路由键发送到交换器,并且绑定确定哪些队列获取消息。

    <rabbit:direct-exchange name="si.test.exchange">
        <rabbit:bindings>
            <rabbit:binding queue="si_test_queue" key="si.test.binding" />
        </rabbit:bindings>
    </rabbit:direct-exchange>
    
    <int-amqp:outbound-channel-adapter
        channel="toRabbit" amqp-template="amqpTemplate" exchange-name="si.test.exchange"
        routing-key="si.test.binding" />
    

    您可以将routing-key-expressionheaders['foo']@someBean.determineRoutingKeyFor(payload) 类似,而不是routing-key

    【讨论】:

    • 您好,非常感谢您的回答。我会在测试后接受它。 - Muthuvel
    猜你喜欢
    • 2014-02-11
    • 1970-01-01
    • 2015-11-03
    • 2016-01-24
    • 2019-12-31
    • 2018-10-27
    • 2015-06-16
    • 2012-05-08
    • 1970-01-01
    相关资源
    最近更新 更多