当前位置: 首页 > 知识库问答 >
问题:

ActiveMQ使用/转发来自另一个ActiveMQ实例的消息

慕震博
2023-03-14

我有两个经纪人A和B。如果我想将消息从A转发给B,一切都很简单。我只需要代理中的网络连接器,如下所示:

<networkConnectors>
    <networkConnector staticBridge="true" userName="user" password="pass" uri="static://(tcp://B:61616)">
        <staticallyIncludedDestinations>
            <queue physicalName="QUEUE.TO.FORWARD.MESSAGE" />
        </staticallyIncludedDestinations>
    </networkConnector>
</networkConnectors>

如果我想从其他队列中使用来自代理 B 的消息,我会犹豫不决(让我们将其命名为 QUEUE。自。消费)我只需要做同样的事情,但双工设置为true,只需听队列。自。在代理 A 上消费,如下所示:

<networkConnectors>
    <networkConnector name="from-B-to-A" staticBridge="true" duplex="true" userName="user" password="pass" uri="static://(tcp://B:61616)">
        <staticallyIncludedDestinations>
            <queue physicalName="QUEUE.TO.CONSUME" />
        </staticallyIncludedDestinations>
    </networkConnector>
    <networkConnector staticBridge="true" userName="user" password="pass" uri="static://(tcp://B:61616)">
        <staticallyIncludedDestinations>
            <queue physicalName="QUEUE.TO.FORWARD.MESSAGE" />
        </staticallyIncludedDestinations>
    </networkConnector>
</networkConnectors>

但是它不像我预期的那样工作。似乎每一秒钟只有一条信息被转发,其余的都丢失了。令人惊讶的是,这在代理B队列上创建了两个消费者。如何在代理A上创建桥,允许我在不丢失消息情况下使用来自代理B的消息。现在还不能在代理B中创建网络连接器。我还尝试过创建像这样的入站队列桥:

<jmsBridgeConnectors>
    <jmsQueueConnector outboundQueueConnectionFactory="#remoteBroker" localUsername="user" localPassword="password">
        <inboundQueueBridges>
            <inboundQueueBridge inboundQueueName="QUEUE.TO.CONSUME" localQueueName="QUEUE.TO.CONSUME" />
        </inboundQueueBridges>
    </jmsQueueConnector>
</jmsBridgeConnectors>
...
</broker>
<bean id="remoteBroker" class="org.apache.activemq.ActiveMQConnectionFactory">
        <property name="brokerURL" value="failover://(nio:B:61616)" />
        <property name="userName" value="user" />
        <property name="password" value="password" />
</bean>

此配置在远程代理 B 上创建使用者,但它不会消耗任何消息,这些消息只是挂起为排队状态,没有任何反应。代理 A 仍不会接收到其本地队列的任何消息。

共有1个答案

祁绪
2023-03-14

好吧,我明白了。我刚刚使用嵌入式Apache Camel来定义到远程主机的路由,它看起来像这样(conf目录中的camel.xml):

<beans
        xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:camel="http://camel.apache.org/schema/spring"
        xsi:schemaLocation="
     http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <camelContext id="context" xmlns="http://camel.apache.org/schema/spring">
        <route>
            <from uri="remoteBroker:queue:QUEUE.TO.CONSUME"/>
            <to uri="localBroker:queue:QUEUE.TO.CONSUME"/>
        </route>
    </camelContext>

    <bean id="remoteBroker" class="org.apache.activemq.camel.component.ActiveMQComponent">
        <property name="connectionFactory">
            <bean class="org.apache.activemq.ActiveMQConnectionFactory">
                <property name="brokerURL" value="tcp://B:61616"/>
                <property name="userName" value="user"/>
                <property name="password" value="password"/>
            </bean>
        </property>
    </bean>

    <bean id="localBroker" class="org.apache.activemq.camel.component.ActiveMQComponent">
        <property name="connectionFactory">
            <bean class="org.apache.activemq.ActiveMQConnectionFactory">
                <property name="brokerURL" value="vm://localhost"/>
            </bean>
        </property>
    </bean>

</beans>

其中 localhost i broker A.在 activemq 中.xml:

<import resource="camel.xml"/>
 类似资料:
  • 线程名称:线程组1-1示例开始时间:2019-09-11 18:52:42英国夏令时加载时间:0连接时间:0延迟时间:0大小以字节为单位:0发送字节:0头大小以字节为单位:0主体大小以字节为单位:0示例计数:1错误计数:1数据类型(“text”“bin”“”):文本响应代码:000响应消息:javax.naming.nameNotFoundException:DynamicQueue/MyQueu

  • Artemis v2.6.0 > 我们正在以Master-Master模式部署2个Artemis实例(Instance-1和Instance-2)。 案例:1 当消费者连接到Instance-2,生产者连接到instance-1时。 预期行为:消费者应该收到生产者生成的消息。 实际行为:消费者没有收到任何消息。但是,我们可以看到消息确认计数等于消息总数。还注意到另一个名为$.Artemis.int

  • 本文向大家介绍PHP使用ActiveMQ实例,包括了PHP使用ActiveMQ实例的使用技巧和注意事项,需要的朋友参考一下 使用点对点(Point To Point)模型 点对点模型特点: 只有一个消费者可以接收到消息 不能重复消费 生产者producer.php代码: 消费者1consumer1.php代码: 消费者2consumer2.php代码: 执行结果图如下: 使用发布/订阅(Publi

  • 本文向大家介绍python 发送和接收ActiveMQ消息的实例,包括了python 发送和接收ActiveMQ消息的实例的使用技巧和注意事项,需要的朋友参考一下 ActiveMQ是java开发的消息中间件服务。可以支持多种协议(AMQP,MQTT,OpenWire,Stomp),默认的是OpenWire。而python与ActiveMQ的通信使用的是Stomp协议。而如果你的服务没有开启则需要配

  • 我正在运行同一个Spring Boot 2.0.4应用程序的多个实例,出于扩展目的,它们使用以下命令消耗来自ActiveMQ队列的消息:@JmsListener(目的地="myQ") 只有第一个消费者接收消息,如果我停止第一个消费者,第二个实例开始接收消息。我希望每个消费者以循环方式使用一条消息,而不是同一条消息。但只有第一消费者消费消息。

  • 我有一个在Payara 4.1.2.173上运行的应用程序。应用程序应该发送和接收JMS消息,因此,我使用Apache ActiveMQ Artemis。我选择ActiveMQ Artemis是因为ActiveMQ只支持JMS1.1,而ActiveMQ Artemis支持JMS2.0。 但是我觉得奇怪的是,ActiveMQ Artemis没有提供资源适配器(.rar文件),而ActiveMQ却提供