这不是一个问题,而是一个答案.我是wso2 ESB的新手,并希望在POC中实现拆分/收集EIP的测试运行.我按照我找到的示例,立即得到了一个返回单个响应的工作配置.然而,要获得所有回复,需要花费相当多的时间才能弄明白.大多数给定的样本似乎产生了相同的意外结果.我希望如果遇到同样的问题,这些行对你有帮助.
我使用soapUI示例服务(搜索操作)作为服务后端.我发送了一个组合消息,搜索两个项目到代理服务器(参见下面的artefact)迭代中介器拆分消息并将其转发到调用soapUI模型的端点.该总调解人等待所有响应,并试图把它变成一个结果消息.
虽然拆分器工作正常,但聚合器只返回一个结果元素而不是预期的元素列表.所有日志显示一切正常,几个请求被发送到相应的端点,但仍然只有最终响应返回的最终响应.
在将代理的日志级别设置为TRACE之后,我意识到聚合器工作得很好,只是它创建了一个不符合SOAP的消息.所有聚集的元素都直接添加到肥皂体下面.所以问题是如何在body和result标签之间添加一个根元素.我首先尝试了XSLT,但它也只能读取正文的第一个子元素.最后,我发现了一些深埋提示使用的充实调解员(或相当的一系列),并且没有的伎俩.以下列表说明了大多数示例中未找到的配置部分(如下所示).
<body>
<sam:multisearch xmlns:sam="http://www.example.org/sample/">
<sam:search>
<sessionid>123</sessionid>
<searchstring>Item 1</searchstring>
</sam:search>
<sam:search>
<sessionid>123</sessionid>
<searchstring>Item 2</searchstring>
</sam:search>
</sam:multisearch>
</body>
Run Code Online (Sandbox Code Playgroud)
<proxy xmlns="http://ws.apache.org/ns/synapse" name="test.multisearch" transports="https,http" statistics="enable" trace="enable" startOnLoad="true">
<target>
<inSequence>
<iterate xmlns:sam="http://www.example.org/sample/" expression="//sam:multisearch/sam:search">
<target>
<sequence>
<send>
<endpoint key="soapUI_Mockup"/>
</send>
</sequence>
</target>
</iterate>
</inSequence> …Run Code Online (Sandbox Code Playgroud) 我所研究的ESB和BPM工具都采用了一些输入,调用了多个步骤来完成任务.我所看到的不同之处在于,在ESB中,一切都是自动化的 - 过程是自动触发的,涉及大量外部调用/数据被转换并发送到适当的系统以供消费.在BPM系统的情况下,该过程可以手动或自动启动,它涉及一系列决策步骤,其中一些涉及手动决策步骤.一旦完成这些步骤,任务就被标记为完成.是否有可能解释BPM和ESB之间的明显区别?
我必须选择一种技术来连接我的应用程序/表示层(基于Java)和服务层(基于Java).基本上从业务代表对象中查找适当的Spring服务.
那里有很多选择让我很困惑.以下是我缩小到但不确定的选项..
春季RMI
Apache Camel
Apache ServiceMix(ESB)
Iona FUSE(ESB)
这是我想知道的
任何帮助都会有用.谢谢!
我希望Stackoverflow上的架构问题是合理的,所以我在这里问这个问题.
我一直试图看看函数式语言在面向数学的问题之外会有什么用处,而且我明白ESB(企业服务总线)对FP语言来说是完美的,因为请求之间没有任何共享根据我的经验,当初始消息进入并根据转换规则进行处理时.
是否有任何理由为什么这会是一个坏主意?
是否已经完成了进展?
我相信,像Erlang这样的东西的可扩展性可能非常有用.
我开始计划一个新平台,需要整合各种外部平台的各种服务.基本上我把一堆内部的本土服务和几个外部服务捆绑在一起,我们从第三方获得许可.
一般来说,外部服务都是Web服务,但它们是REST,SOAP和XML-RPC的混合体.我们的一些内部服务有REST API,但有许多事情并不那么容易:XMPP,Hessian,自定义套接字协议,Java RPC,uWSGI以及列表都在继续.
根据我的研究,似乎像Apache ServiceMix这样的ESB可能非常适合我的需求.然而它看起来真的很复杂.我不是发射火箭但我确实需要交易消息(主要用于电子商务和授权的东西).我觉得ServiceMix使用的消息队列(ActiveMQ)本身就足够了.
任何人都能解释一下ServiceMix在ActiveMQ之上提供的内容吗?我知道有很多,但是当我浪费在流行语中时,像我这样的ESB n00b很难真正掌握有形的差异.
谢谢!
RPC系统(如Twitter的Finagle)和企业服务总线(如Mule)之间有什么区别?他们每个人都善于解决什么样的问题?
消息总线体系结构的每个描述似乎都描述了用于路由消息的集中式中介:
每个应用程序都与消息总线有一个连接,而不是与每个其他应用程序的多个专用连接.
http://msdn.microsoft.com/en-us/library/ff647328.aspx
将这些应用程序之间的连接中间件构建为消息总线,使它们能够使用消息传递协同工作.
http://www.eaipatterns.com/MessageBus.html
Service Bus是位于应用程序之间的消息传递基础结构,允许它们以松散耦合的方式交换消息,以提高规模和弹性.
http://www.windowsazure.com/en-us/home/features/messaging/
描述看起来与Message Broker体系结构相同; 让我相信以下几点:
术语"消息总线"实际上与"MoM"相同 - 一个用于引用消息传递基础结构而没有明确提及拓扑的通用术语.即Message Broker 是一种消息总线.
这似乎是一个有争议的话题,虽然在SO上有一些类似的问题,但没有一个(IMO)有明确的答案.
Ps我知道企业服务总线完全不同,实际上是一个"功能丰富"的MoM.
涉及WSO2 ESB示例http://wso2.org/library/articles/2011/01/wso2-esb-example-file-processing但遇到一个问题,当一个简单的csv文件
name0,value0
name1,value1
name2,value2
name3,value3
Run Code Online (Sandbox Code Playgroud)
使用此配置由smooks解析
<smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd" xmlns:csv="http://www.milyn.org/xsd/smooks/csv-1.1.xsd">
<csv:reader fields="name,value" />
</smooks-resource-list>
Run Code Online (Sandbox Code Playgroud)
导致很大程度上正确的输出,但第一行包括有效负载命名空间,这是不正确的
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<text xmlns="http://ws.apache.org/commons/ns/payload">name0,value0
name1,value1
name2,value2
name3,value3</text>
</soapenv:Body>
</soapenv:Envelope>
Run Code Online (Sandbox Code Playgroud)
所以当读取第一个name0值时,它包括哪个也是不正确的.
Smooks然后将其转换为
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<csv-set>
<csv-record number="1">
<name><?xml version='1.0' encoding='utf-8'?><text xmlns="http://ws.apache.org/commons/ns/payload">name0</name>
<value>value0</value>
</csv-record>
<csv-record number="2">
<name>name1</name>
<value>value1</value>
</csv-record>
<csv-record number="3">
<name>name2</name>
<value>value2</value>
</csv-record>
<csv-record number="4">
<name>name3</name>
<value>value3</text></value>
</csv-record>
</csv-set>
</soapenv:Body>
</soapenv:Envelope>
Run Code Online (Sandbox Code Playgroud)
那么Smooks正在做所有的问题,因为输入包括最后一个?但是,它理解的元素数量被计为4,所以它不像csv应该有一个标题行.我可以通过包含标题行来解决(在某种程度上),但元素计数不正确.我可以通过在csv的最后一行包含一个回车来解决结束.
我该如何解决这个问题?我在一年前找到另一个线程问同样的问题,但没有答案.
请帮助调试以下问题.
关于环境的总结
1)我们有两个不同的esb盒和服务盒.在Esb框中,部署了所有esb,在服务框中,部署了所有服务.
2)WSDL在esb框上本地是kepl,jboss-esb.xml正在接收wsdl
2012-12-19 11:04:46,056 ERROR [org.jboss.kernel.plugins.dependency.AbstractKernelController] (Thread-2) Error installing to Start: name=jboss.esb.vfs:///opt/jboss-6.0.0.Final/server/default/deploy/NotificationServiceESB.esb state=Create: org.jboss.soa.esb.listeners.lifecycle.ManagedLifecycleException: Error configuring action processing pipeline
at org.jboss.soa.esb.listeners.message.MessageAwareListener.doInitialise(MessageAwareListener.java:192) [:]
at org.jboss.soa.esb.listeners.lifecycle.AbstractManagedLifecycle.initialise(AbstractManagedLifecycle.java:133) [:]
at org.jboss.soa.esb.listeners.lifecycle.ManagedLifecycleController.initialiseInstances(ManagedLifecycleController.java:109) [:]
at org.jboss.soa.esb.listeners.lifecycle.ManagedLifecycleController.start(ManagedLifecycleController.java:66) [:]
at org.jboss.soa.esb.listeners.deployers.mc.as6.EsbDeployment.start(EsbDeployment.java:234) [:]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [:1.6.0_16]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [:1.6.0_16]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [:1.6.0_16]
at java.lang.reflect.Method.invoke(Method.java:597) [:1.6.0_16]
at org.jboss.reflect.plugins.introspection.ReflectionUtils.invoke(ReflectionUtils.java:60) [jboss-reflect.jar:2.2.0.GA]
at org.jboss.reflect.plugins.introspection.ReflectMethodInfoImpl.invoke(ReflectMethodInfoImpl.java:168) [jboss-reflect.jar:2.2.0.GA]
at org.jboss.joinpoint.plugins.BasicMethodJoinPoint.dispatch(BasicMethodJoinPoint.java:66) [jboss-reflect.jar:2.2.0.GA]
at org.jboss.kernel.plugins.dependency.KernelControllerContextAction$JoinpointDispatchWrapper.execute(KernelControllerContextAction.java:257) [jboss-kernel.jar:2.2.0.GA]
at org.jboss.kernel.plugins.dependency.ExecutionWrapper.execute(ExecutionWrapper.java:47) [jboss-kernel.jar:2.2.0.GA]
at org.jboss.kernel.plugins.dependency.KernelControllerContextAction.dispatchExecutionWrapper(KernelControllerContextAction.java:125) [jboss-kernel.jar:2.2.0.GA]
at org.jboss.kernel.plugins.dependency.KernelControllerContextAction.dispatchJoinPoint(KernelControllerContextAction.java:72) [jboss-kernel.jar:2.2.0.GA]
at org.jboss.kernel.plugins.dependency.LifecycleAction.installActionInternal(LifecycleAction.java:202) [jboss-kernel.jar:2.2.0.GA]
at org.jboss.kernel.plugins.dependency.InstallsAwareAction.installAction(InstallsAwareAction.java:54) [jboss-kernel.jar:2.2.0.GA]
at org.jboss.kernel.plugins.dependency.InstallsAwareAction.installAction(InstallsAwareAction.java:42) [jboss-kernel.jar:2.2.0.GA]
at …Run Code Online (Sandbox Code Playgroud) 我一直在尝试在WSO2 ESB中实现一个简单的心跳REST API,但我无法得到回复.以下是API
<api xmlns="http://ws.apache.org/ns/synapse" name="HealthCheckAPI" context="/HealthCheck">
<resource methods="GET" url-mapping="/status" faultSequence="fault">
<inSequence>
<payloadFactory media-type="json">
<format>{"Status":"OK"}</format>
<args></args>
</payloadFactory>
<log>
<property name="JSON-Payload" expression="json-eval($.)"></property>
</log>
<property name="messageType" value="application/json" scope="axis2" type="STRING"></property>
<respond></respond>
</inSequence>
</resource>
</api>
Run Code Online (Sandbox Code Playgroud)
当我卷曲API时,响应为零长度.可能有什么不对?