【问题标题】:WSO2 Message Broker 3.0.0 and WS-EventingWSO2 消息代理 3.0.0 和 WS-Eventing
【发布时间】:2016-01-15 13:49:25
【问题描述】:

我正在测试 WSO2 Message Broker 3.0,但我错过了订阅 WS 端点到主题的功能。 能否像在 MB 2.x 中一样使用 MB 3.0 激活此功能? 我正在尝试为 WS-Endpoints 实现可靠的(排队的)主题订阅。如何使用 WSO2 MB 3.0 实现?

【问题讨论】:

    标签: wso2 wso2mb ws-eventing


    【解决方案1】:

    WS-Eventing 从 WSO2 MB 3.0.0 中移除。但是您可以通过将 WSO2 MB 与 WSO2 ESB 集成来实现这一点。这是用于可靠消息传递的广泛使用的通用集成模式,您还可以根据需要在 WSO2 ESB 中修改/调解消息,然后再发送到实际后端。让我们看看如何做到这一点。

    我将向您展示如何在本地机器上集成 WSO2 ESB 和 WSO2 MB。

    • http://wso2.com/products/enterprise-service-bus/ 下载 WSO2 ESB 4.9.0(最新版本)。希望您已经拥有 WSO2 MB 3.0.0(最新版本)。

    • 解压后,打开 wso2esb-4.9.0/repository/conf/carbon.xml 文件并将<Offset>0</Offset> 更改为<Offset>1</Offset>。这允许您在单台机器上运行多个碳服务器。您可以访问管理控制台https://localhost:9444/carbon

    • 打开 wso2esb-4.9.0/repository/conf/axis2/axis2.xml 并取消注释 <!--Uncomment this and configure as appropriate for JMS transport support with WSO2 MB 2.x.x--> 之后的部分(用于 JMS 传输接收器)和<!--uncomment this and configure to use connection pools for sending messages--> 之后的部分(用于 JMS 传输发送器)。

    • 复制andes-client-3.0.1.jar geronimo-jms_1.1_spec-1.1.0.wso2v1.jar org.wso2.securevault-1.0.0-wso2v2.jarwso2mb-3.0.0/client-libwso2esb-4.9.0/repository/components/lib

    • 将以下条目添加到wso2esb-4.9.0/repository/conf/jndi.properties

      connectionfactory.QueueConnectionFactory = amqp://admin:admin@clientID/carbon?brokerlist='tcp://localhost:5672'

      connectionfactory.TopicConnectionFactory = amqp://admin:admin@clientID/carbon?brokerlist='tcp://localhost:5672'

      topic.MyDurableTopic = MyDurbleTopic

    • 首先启动 WSO2 MB,然后通过在 bin 文件夹中运行 wso2server.shwso2server.bat 来启动 WSO2 ESB,具体取决于您使用的操作系统

    • 集成完成。

    让我们看看如何创建 JMS 侦听器代理,它在 WSO2 MB 中创建持久订阅。转到 ESB 管理控制台,选择代理服务 -> 自定义代理 -> 切换到源视图。然后复制并粘贴到突触配置下方以创建 JMS 侦听器。

    <?xml version="1.0" encoding="UTF-8"?>
    <proxy xmlns="http://ws.apache.org/ns/synapse"
          name="MyDurableTopicListenerProxy"
          transports="jms"
          statistics="disable"
          trace="disable"
          startOnLoad="true">
      <target>
         <inSequence>
            <property name="OUT_ONLY" value="true"/>
            <log level="custom">
               <property name="STATE" value="dispatch message..."/>
            </log>
            <send>
               <endpoint>
                  <address uri="http://localhost:9000/services/SimpleStockQuoteService"/>
               </endpoint>
            </send>
         </inSequence>
         <outSequence>
            <send/>
         </outSequence>
      </target>
      <parameter name="transport.jms.ContentType">
         <rules>
            <jmsProperty>contentType</jmsProperty>
            <default>text/xml</default>
         </rules>
      </parameter>
      <parameter name="transport.jms.ConnectionFactory">myTopicConnectionFactory</parameter>
      <parameter name="transport.jms.DestinationType">topic</parameter>
      <parameter name="transport.jms.SubscriptionDurable">true</parameter>
      <parameter name="transport.jms.Destination">MyDurbleTopic</parameter>
      <parameter name="transport.jms.DurableSubscriberName">subId-x</parameter>
      <parameter name="transport.jms.CacheLevel">consumer</parameter>
      <parameter name="transport.jms.DurableSubscriberClientID">subId-x</parameter>
      <description/>
    </proxy>
    

    您可以通过更改 &lt;address uri="http://localhost:9000/services/SimpleStockQuoteService"/&gt; 来替换任何 WS 端点。在这里,我使用了示例 axis2 后端。保存代理服务后,它将使用 WSO2 MB 中的 MyDurableTopic 创建持久订阅。您不需要在 WSO2 MB 中创建 MyDurableTopic。订阅将创建一个持久主题(根据 JMS 规范)。

    现在您可以将消息发送到持久主题并查看这些消息发送到 WS 端点。这是 JMS 到 HTTP(跨协议)传输。同样,您可以将标准模式与此设置集成。

    希望这会有所帮助!

    干杯!

    【讨论】:

    • 非常感谢您的建议。但是,Send 中介似乎在将消息传递到 Passthrough 传输时立即关闭 JMS 会话。这意味着如果无法发送消息,则无法回滚 JMS 消息。我已经使用 Callout 调解器测试了一个解决方案,但是有没有办法使用 JMS 事务来提高直通传输的性能?
    猜你喜欢
    • 1970-01-01
    • 2015-07-17
    • 2016-03-07
    • 1970-01-01
    • 2014-05-12
    • 1970-01-01
    • 1970-01-01
    • 2013-02-26
    • 2023-03-05
    相关资源
    最近更新 更多