【问题标题】:JMS Configuration with ActiveMQ使用 ActiveMQ 进行 JMS 配置
【发布时间】:2013-07-24 14:35:22
【问题描述】:

我已经完成了消息存储和转发过程所需的所有过程 安装了activeMQ 5.5.1 并在 WSO2eSb 中复制必要的罐子 还更改了 AXIS2 文件配置 像这样

<transportReceiver name="jms" class="org.apache.axis2.transport.jms.JMSListener">
        <parameter name="myTopicConnectionFactory" locked="false">
            <parameter name="java.naming.factory.initial" locked="false">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
            <parameter name="java.naming.provider.url" locked="false">tcp://localhost:61616</parameter>
            <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">TopicConnectionFactory</parameter>
            <parameter name="transport.jms.ConnectionFactoryType" locked="false">topic</parameter>
        </parameter>

        <parameter name="myQueueConnectionFactory" locked="false">
            <parameter name="java.naming.factory.initial" locked="false">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
            <parameter name="java.naming.provider.url" locked="false">tcp://localhost:61616</parameter>
            <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">QueueConnectionFactory</parameter>
            <parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter>
        </parameter>

        <parameter name="default" locked="false">
            <parameter name="java.naming.factory.initial" locked="false">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
            <parameter name="java.naming.provider.url" locked="false">tcp://localhost:61616</parameter>
            <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">QueueConnectionFactory</parameter>
            <parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter>
        </parameter>
    </transportReceiver>

INFO - JMSSender JMS Sender 已启动 [2013-07-23 17:02:18,752] 信息 - JMSSender JMS Transport Sender 已初始化... 在此之后我创建了 JMS MESSAGE STORE

messageStore name="faisal" class="org.wso2.carbon.message.store.persistence.jms.JMSMessageStore" xmlns="http://ws.apache.org/ns/synapse">
   <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
   <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter>
   <parameter name="store.jms.destination">transport.jms.ConnectionFactoryJNDIName</parameter>
   <parameter name="store.jms.JMSSpecVersion">1.1</parameter>
   <parameter name="store.jms.cache.connection">false</parameter>
</messageStore>

并使用它添加计划的消息转发处理器

<messageProcessor name="process5" class="org.apache.synapse.message.processors.forward.ScheduledMessageForwardingProcessor" messageStore="faisal" xmlns="http://ws.apache.org/ns/synapse">
   <parameter name="interval">1000</parameter>
   <parameter name="max.delivery.attempts">10</parameter>
   <parameter name="message.processor.reply.sequence">Mail_Seq</parameter>
</messageProcessor>

和我这样的代理服务配置

<proxy xmlns="http://ws.apache.org/ns/synapse" name="Message" transports="https,http,jms" statistics="disable" trace="disable" startOnLoad="true">
   <target>
      <inSequence>
         <property name="faisal" value="faisal" scope="default" type="STRING"/>
         <store messageStore="faisal"/>
         <log level="full"/>
      </inSequence>
      <outSequence>
         <log level="full"/>
      </outSequence>
   </target>
   <description></description>
</proxy>

将消息存储在消息存储中但转发错误 IF 端点无法工作,即使消息正在 WSO2esb 中处理其丢失的消息,它会给出此消息

[2013-07-23 17:02:18,817]  WARN - ForwardingJob Property target.endpoint not found in the message context , Hence removing the message 
[2013-07-23 17:02:18,869]  WARN - ForwardingJob Property target.endpoint not found in the message context , Hence removing the message 
[2013-07-23 17:08:07,419]  WARN - JMSMessageStore Consumer Receiving time out is not passed in, Setting to default value of 60 secs

【问题讨论】:

    标签: wso2 wso2esb wso2dss jms-topic


    【解决方案1】:

    使用正确的后端 uri 创建一个地址端点,如下所示。

    <endpoint xmlns="http://ws.apache.org/ns/synapse" name="Service1EP">
       <address uri="http://localhost:8080/services/service1"">
          <suspendOnFailure>
             <progressionFactor>1.0</progressionFactor>
          </suspendOnFailure>
          <markForSuspension>
             <retriesBeforeSuspension>0</retriesBeforeSuspension>
             <retryDelay>0</retryDelay>
          </markForSuspension>
       </address>
    </endpoint>
    

    然后通过在您的 inSequence 中添加以下行来在您的代理服务中引用该端点。

    <property name="target.endpoint" value="Service1EP" scope="default" type="STRING"/>
    

    【讨论】:

    • 感谢重播,即使我的端点未定义,我也得到了你,我需要将该消息留在 jms 队列中,以免丢失任何成本,它既不会传递给客户端,也不会留在 jms 队列中 我们如何可以达到的
    • 查看我看到的代码,如果找不到目标端点,则该消息将从消息存储中删除。您可以设置一个虚拟端点,然后它将重试最大数量。尝试并留在商店。或者您可以停用消息处理器,以便消息保留在存储中。
    • 你的意思是我们没有任何参数可以帮助将消息留在队列中而不发送我可以像这样定义消息处理器的序列端点 Mail_Seq
    • 这是在 esb 中生成的,它对任何已经生成的东西都有用吗......jms:/Message?transport.jms.DestinationType=queue&transport.jms.ContentTypeProperty=Content-类型&java.naming.provider.url=tcp://localhost:61616&java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory&transport.jms.ConnectionFactoryType=queue&transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory
    • 如果你创建了一个消息存储,所有的消息都会被存储。当您创建消息处理器时,它们将被传递到定义的端点。没有 msg 处理器消息将不会被发送。 “message.processor.reply.sequence”用于处理发送到端点后收到的响应。响应将发送到此序列。
    【解决方案2】:

    这是因为您尚未定义目标端点。因此没有地方可以传递消息。因此该消息将被删除。您的突触配置不包含任何端点。

    这篇博文可能会对你有所帮助。

    http://isharaaruna.blogspot.com/2012/09/jms-transports-in-wso2-esb-with-activemq.html

    【讨论】:

    • 即使我的消息不应该以任何成本丢失,但它可能只传递或留在 jms 队列中
    猜你喜欢
    • 2023-03-26
    • 1970-01-01
    • 2011-02-21
    • 2015-12-13
    • 1970-01-01
    • 2020-01-16
    • 1970-01-01
    • 1970-01-01
    • 2015-01-28
    相关资源
    最近更新 更多