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

Apache Camel消息多路复用器集成模式

闾丘坚诚
2023-03-14

我正在尝试确定使用ApacheCamel和Spring将来自两个hornetq broker实例的消息流组合成单个流进行处理的最佳方式。这本质上与驼峰接收列表模式相反;但我需要的不是一对多,而是多对一。一个想法是使用direct组件实现此功能:

<?xml version="1.0" encoding="UTF-8"/>
<beans xmlns="..."
       xmlns="...">

    <!-- JMS Connection 1 -->
    <bean id="jndiTemplate1" class="org.springframework.jndi.JndiTemplate">
        <property name="environment">
            <props>
                ...Connection 1 Specific Information...
            </props>
        </property>
    </bean>
    <bean id="jmsTopicConnectionFactory1" 
          class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiTemplate">
            <ref bean="jndiTemplate1"/>
        </property>
        <property name="jndiName">
            <value>java:jms/RemoteConnectionFactory</value> 
        </property>
    </bean>
    <bean id="jms1" class="org.apache.camel.component.jms.JmsComponent">
        <property name="connectionFactory" ref="jmsTopicConnectionFactory1"/>
    </bean>

    <!-- JMS Connection 2 -->
    <bean id="jndiTemplate2" class="org.springframework.jndi.JndiTemplate">
        <property name="environment">
            <props>
                ...Connection 2 Specific Information...
            </props>
        </property>
    </bean>
    <bean id="jmsTopicConnectionFactory2" 
          class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiTemplate">
            <ref bean="jndiTemplate2"/>
        </property>
        <property name="jndiName">
            <value>java:jms/RemoteConnectionFactory</value> 
        </property>
    </bean>
    <bean id="jms2" class="org.apache.camel.component.jms.JmsComponent">
        <property name="connectionFactory" ref="jmsTopicConnectionFactory2"/>
    </bean>

    <!-- Camel route many to 1 using direct component -->
    <camelContext xmlns="http://camel.apache.org/schema/spring">
        <route id="hornetQ_broker_1">
            <from uri="jms1:topic:testTopic1">
            <to uri="direct:process_message">
        </route>
        <route id="hornetQ_broker_2">
            <from uri="jms2:topic:testTopic2">
            <to uri="direct:process_message">
        </route>
        <route id="message_processor">
            <from uri="direct:process_message">
            <log message="message_processor received message">
        </route>
    </camelContext>
</beans>

问题:在许多情况下,是否建议采用上述方法-

运行时环境:

  • HornetQ经纪人是JBoss EAP6

笔记:

  • hornetQ代理实例不能集群。
  • hornetQ代理实例不包含重复数据。

共有1个答案

周和歌
2023-03-14

我认为你的方法适用于你的情况。但是,如果您在不同的JVM中运行,可能direct不是您需要使用的组件。

内部队列有不同的组件:直接、直接虚拟机、SEDA、虚拟机、干扰器...但是我相信如果你在JVM中运行,它们都是(如果你只是在同一个CamelContext中运行,其中一些也是)。有关更多信息:直接、事件、seda和vmendpoint如何比较

如果要在不同的JVM中使用不同的上下文,则需要使用不同的组件。

 类似资料:
  • 在Spring集成中使用出站网关时,我试图在JMS标头中发送回复Q详细信息。我了解到JIRA#INT-97中的增强功能在将Spring消息标头发送到JMS目标之前将其复制到JMS标头。 在将消息发送到出站网关之前,将消息头设置如下。message.getHeader(). setAtcm(JmsTargetAdapter.JMS_REPLY_TO, myReplyDestation); 但是我无法

  • 我是Spring集成的新手,正在研究一个从单个通道向多个通道发送消息的示例,从这个角度来看,为每个通道使用Redis消息存储,目的是不丢失任何消息。要求将消息发送到通道-replyChannel、mailChannel和dbChannel。目前,代码只打印sysout语句,没有主要功能。 为了检查消息是否被正确路由,我编写了一个java测试类来发送15条消息。 检查输出,我发现一些消息正在丢失。也

  • 所以,问题在于路由器。当路由器尝试向通道发送消息时,我会收到错误:Dispatcher没有通道“newTypingNotificationHandler”的订户。输入'。但我有这个频道名称的集成流防御。 原因: org.springframework.integration.MessageDispatching异常:调度器在org.springframework.integration.dispa

  • 使用Java 8 streams,我可以通过分类器对消息进行分组: 我想写一个聚合器,将消息进行相应的分组。在如上所示的五条有效载荷消息中,我想生成三条消息:第一条消息应将“a”作为有效载荷,第二条消息应将三条“b”作为有效载荷,第三条消息应将“c”作为有效载荷。 当达到序列大小时,应释放所有消息组。基于有效负载的分组工作正常,但消息组永远不会被释放。 在发布策略中,我可以访问序列大小,但我无法找

  • 我有一个集成应用程序,大部分工作,但注意到昨天一个消息丢失了。当时,service-activatorendpoint正忙于处理先前的消息。 以下是适用于该问题的配置。

  • 问题内容: 注意-Go中的新手。 我编写了一个多路复用器,该多路复用器 应将 一组通道的输出合并为一个。对建设性的批评感到满意。 我正在测试: 但是我的输出很奇怪: 所以对我的问题: Mux中我在做错什么吗? 为什么我只能从输出通道中获取最后10个? 为什么喂食看起来如此奇怪?(每个输入通道的第一个,最后一个通道的所有,然后什么都没有) 有更好的方法吗? 我需要所有输入通道具有与输出通道相同的权限