探索在Wso2 ESB中使用主题和事件

时间:2014-03-04 20:19:40

标签: events wso2 esb

我正在探索在WSO2 ESB 4.8.1中使用主题和事件,我创建了一个主题并订阅了一个在WSO2 WSAS(A)中运行的数据服务的端点,我想如果我发布了一条消息为主题详细信息控制台的发布工具中的A操作之一的传入消息定义的结构,该消息将被发送到supscriptor(A)以及所有可以正常工作的内容,但事实并非如此。为什么? 我还使用事件介体创建代理服务,并使用创建的主题的名称配置事件介体。然后我尝试使用具有前面解释的相同结构的传入消息的代理服务。我期待至少在WSAS Soap Tracer中收到传入消息,但什么也没发生。 我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

事件基础架构基于WS-Eventing规范。由于您使用基于WSDL的服务作为主题的订阅者并打算调用该服务的特定操作,我认为它失败了,因为SOAP消息和/或SOAP操作不正确,因为发送到主题的消息和服务基于WS-Eventing而不是您的服务。

我在下面创建了简单代理,并将其订阅了一个主题。

<proxy xmlns="http://ws.apache.org/ns/synapse" name="LogSubMessage" transports="http" statistics="disable" trace="disable" startOnLoad="true">
    <target>
        <inSequence>
            <log level="full" category="ERROR">
                <property name="SERVICE" value="LogSubMessage"/>
            </log>
        </inSequence>
        <outSequence><send/></outSequence>
    </target>
</proxy>

然后我向该主题发送了<test/>条消息。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Header>
        <ns:topic xmlns:ns="http://wso2.org/ns/2009/09/eventing/notify">topicname</ns:topic>
    </soapenv:Header>
    <soapenv:Body>
        <test/>
    </soapenv:Body>
</soapenv:Envelope>

正如您在上面的消息中所看到的,服务中记录的消息包含WS-Eventing SOAP标头,SOAP操作设置为http://ws.apache.org/ws/2007/05/eventing-extended/Publish。如果您的数据服务要求SOAP标头包含要调用的操作的名称,那么它将拒绝此请求。

我建议创建一个代理主题的代理服务,类似于上面的代理服务。此服务将设置正确的SOAP操作,执行您需要的任何消息转换,并调用您的数据服务。