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