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

驼峰JMS CXF终结点不创建新的临时回复队列

孟英锐
2023-03-14

我有两个使用JMS作为传输的CXFendpoint;一个用作消费者,另一个用作生产者。这是一个非常精简的设置。

<camelcxf:cxfEndpoint xmlns:i="http://inbound.com/inbound"
                      id="myInboundEndpoint"
                      endpointName="i:InboundService"
                      serviceName="i:InboundService"
                      address="camel://direct:my-inbound-route"
                      serviceClass="com.InboundService"
                      bus="cxf"
                      wsdlURL="classpath:META-INF/wsdl/inbound.wsdl">
    <camelcxf:properties>
        <entry key="dataFormat" value="POJO"/>
    </camelcxf:properties>
</camelcxf:cxfEndpoint>

<camelcxf:cxfEndpoint xmlns:o="http://outbound.com/outbound"
                      id="myOutboundEndpoint"
                      endpointName="o:OutboundService"
                      serviceName="o:OutboundService"
                      address=""jms://"" 
                      serviceClass="com.OutboundService"
                      bus="cxf"
                      wsdlURL="classpath:META-INF/wsdl/outbound.wsdl">
    <camelcxf:properties>
        <entry key="dataFormat" value="POJO"/>
    </camelcxf:properties>
    <camelcxf:features>
        <bean class="org.apache.cxf.transport.jms.JMSConfigFeature">
            <property name="jmsConfig" ref="jmsConfig" />
        </bean>
    </camelcxf:features>
</camelcxf:cxfEndpoint>

<bean id="jmsConfig" class="org.apache.cxf.transport.jms.JMSConfiguration">
    <property name="connectionFactory" ref="pooledConnectionFactory" />
    <property name="targetDestination" value="some-queue" />
</bean>

<camelContext>
    <route id="inQueue">
        <from uri="activemq:inbound-queue" />
        <to uri="direct:my-inbound-route" />
    </route>
    <route id="inVm">
        <from uri="direct:in-vm" />
        <to uri="direct:my-inbound-route" />
    </route>
    <route id="serviceProxy">
        <from uri="cxf:bean:myInboundEndpoint?synchronous=true" />
        <setHeader headerName="operationName"><constant>myOtherOperation</constant></setHeader>
        <to uri="cxf:bean:outboundEndpoint?synchronous=true" />
    </route>        
</camelContext>

但是当调用第二个路由时会发生什么,CXF组件或camel会尝试重用来自原始入站消息(包括回复队列)的所有JMS配置,而不是仅为此交换创建另一个临时回复队列。这似乎是从in消息中获取的标头。

如果您只使用纯JMS并将CXF从等式中去掉,那么camel会正确地为路由的内部创建一个新队列,尽管我需要继续使用CXF,因为我必须使用一些遗留拦截器

我尝试了使用jms://JMSConfig样式和camel://style。

我目前正在使用jaxws: Client方法,只是使用bean: myBean进行引用?method=myMethod,它可以工作,但不允许我从原始入站方法传播SOAP标头,因此切换到使用cxf: endpoint。

我试图找到一个使用CXF在JMS上使用SOAP的示例,但似乎没有具体的示例。

所以问题是。。。。我是否需要为我的生产者进行任何其他配置,或者是否有其他方法可以使用CXF通过JMS执行SOAP,并传播/设置原始消息/骆驼交换中的一些头?

共有1个答案

宁兴修
2023-03-14

我认为您可能需要从inMessage中筛选replyTo的标题。

如果您想使用SOAP over JMS,您可以在地址上指定所有与JMS相关的设置,而无需破解JMSConfiguration。这是您可以作为示例的文档。

 类似资料:
  • 我试图在camel中获取请求/回复jms消费者,收到了传入消息,我可以看到camel也发送了回复,但消息没有被封送。 我正在使用拦截器封送所有来自activemqendpoint的消息 (我扩展了JacksonDataFormat,以便在封送消息时填充JMSType。) 对于正常的单向交换,这是可行的(例如) 但是当我走这条路的时候 并将带有JMSReplyTo消息的消息发送到测试队列(使用act

  • 我编写了一个应用程序来加载骆驼路线。 我有一个Spring-Camel实例。现在我将加载“模块”来订购我的路线,并有能力通过该模块取消/激活一组路线。 因此,我编写了一个XML文件,并将其解组到Java类中。每个模块现在都是一个Java类。我想在这个Java类中定义骆驼路线。 当我从RouteBuilder扩展Java类时,JAXB不会对其进行编组。 你们中的一些人知道我如何定义我的路由,比如"f

  • 如果这是个愚蠢的问题,请原谅。骆驼洞对我来说是新鲜事,所以我真的没有“全球视野”。我喜欢在camel安装中使用队列。我发现ActiveMQ是一个解决方案,然后偶然发现了两个不同的组件(或uri):ActiveMQ和JMS。 由于ActiveMQ正在实现JMS 1.1,使用这两种URI有什么区别?或者换句话说:我可以同时使用这两种方法吗?如果可以,在哪些情况下应该使用哪一种?

  • 本文向大家介绍MyBatis Map结果的Key转为驼峰式,包括了MyBatis Map结果的Key转为驼峰式的使用技巧和注意事项,需要的朋友参考一下 MyBatis 配置文件中,支持下面这几种配置: properties, settings, typeAliases, typeHandlers, objectFactory, objectWrapperFactory, reflectorFact

  • 我正在尝试为证书配置基于camel jetty的restendpoint。每当我在没有客户端证书的情况下向httpsendpoint发送请求时,它仍然工作,也就是说,从restendpoint有一个有效的响应。我如何确保a)只有拥有有效证书的客户端才能发出请求b)为未经授权的客户端或没有适当证书的客户端引发异常500? 主类 在骆驼路线上

  • 关于ApacheCamel的简短问题。我有以下场景,其中我的服务器接收jms消息,然后转换为csv文件,然后插入DB。为此,我有两个bean: xml2csv 我使用路由像: 当"路由"一个文件从-到,它是移动像一个消息?或者把问题放在不同的地方,ApacheCamel是否获取一个文件,将其包装为消息,并将其路由到bean或组件? 我的理解是正确的还是错误的。