有没有人将Spring Integration项目作为嵌入式ESB 的经验?
我在这样的用例中非常有趣:
更新:
除了"从JDBC数据源获取数据"之外,我找到了所有问题的答案.技术上可行吗?
简而言之,我正在开发一个项目,我们正在为所有常见原因重写大型Web应用程序.重写的主要目的是将在单个服务器上运行的大型单个应用程序分离为许多较小的解耦应用程序,这些应用程序可以在许多服务器上运行.
好的,这就是我想要的:
我想HTTP成为主要的运输机制.当一个应用程序(例如CMS)已更新时,它将通过http联系经纪人并说"I've changed",然后经纪人将发回一个200 OK说"thanks I got the message".
然后,代理将查看其他想要了解CMS更改的应用程序列表,并将该消息传递给应用程序在告知代理希望了解该消息时所留下的URL.
其他应用程序将200 OK在收到消息时返回,如果不是,则代理会保留消息并将其排队,以便下次有人尝试联系该应用程序时.
问题是我甚至不知道从哪里开始或我需要做什么.我一直在寻找XMPP,ActiveMQ,RabbitMQ,Mule ESB等,并可以看到我可以花明年兜兜转转这个东西.
任何人都可以提供个人经验的建议,因为我非常希望避免以艰难的方式吸取教训.
我对BizTalk有一点经验,我试图在不使用它的情况下理解BizTalk 2009 ESB Toolkit 2.首先,我想知道是否有人可以为我清理一些概念:
一些更一般的问题:
提前感谢您的任何见解.
有没有办法使用SQL Server作为物理消息传输而不是使用NServiceBus内置的MSMQ消息传输?
谢谢
我有一个我在Eclipse的Mule IDE上开发(并检查过)的mule应用程序,其中一个组件是使用外部Microsoft JDBC SQL Server Driver类.一切都在Eclipse服务器上运行得很好但是当我尝试从命令行(Mule独立服务器/服务)部署和运行应用程序时 - 我classnotfound对同一个Microsoft JDBC驱动程序有一个例外.
如何在部署程序中包含该驱动程序,以便我可以在没有Eclipse的情况下运行?
我认为通过将外部jar添加到Eclipse项目,它会将该类加载到Mule部署(app)目录中.但是我错了.
关于这个还能做什么?
在工作中,我们正在讨论选择现成的全栈ESB(企业服务总线 - http://en.wikipedia.org/wiki/Enterprise_service_bus),而不是围绕AMQP系统(例如RabbitMQ).
部分关注点是我们的生态系统是PHP尽可能快地向Python移动,我们已经拥有的API都以JSON方式传递消息.ESB和"SOA解决方案"上的搜索空间确实受到严重污染; 或者这不是Python Thing(tm).因此我在这里问:似乎我们所考虑的所有全栈ESB解决方案主要集中在集成基于SOAP的组件上.这似乎是我们可能不想做的很多双重包装和解包的消息.另外,如果可以的话,我们真的想用Python编写我们的服务到ESB适配器.
我应该注意到PHP/Python生态系统是内部的 - 我们的许多客户都是使用我们的应用程序集成的大型单片企业软件的相当隐藏的组织.对于面向客户的API,他们会对SOAP,XML-RPC等感到满意.我们已经有了请求.因此,在边界,我们最终可能最终提供基于JSON和基于SOAP的服务; 只是没有内部.
tl; dr:有没有人喜欢使用Python应用程序的全栈ESB?那个与你合作过的不受欢迎的人怎么样(无论如何,它有多可怕)?你认为包装像RabbitMQ这样的东西对于PHP/Python生态系统来说更好吗?
我目前的情况:
我目前有一个Mule ESB应用程序,它有三个流来处理来自两个不同源的消息,这三个流使用VM队列连接在一起.
流程#1:
入站(端点#1) - >(执行消息处理和转换) - >出站(端点#3)
流程#2:
入站(端点#2) - >(执行消息处理和转换) - >出站(端点#3)
流程#3
入站(端点#3) - >(执行消息处理和转换,执行操作) - >出站
问题/问题:
现在我要做的是引入第四个流程,Flow#4,它从入站端点获取状态信息,并根据此信息能够防止流#3被执行/阻止它处理其入站消息.
换句话说,我理想的是让Flow#4在ESB应用程序启动时运行(就像所有流程似乎自动执行),并基于它从入站消息获取的状态信息,阻止/允许或启用/禁用流程#3处理来自端点#3的消息.
以下是我理想的要求:
要求:
完成我想做的最好的方法是什么?
如果没有真正好的解决方案,那么如果我必须省略#3要求,那么实现这样一个全局变量的最佳方法是什么,这个变量在两个独立的流之间共享,这些流不是由一些出站 - >入站端点连接在一起的XML配置?我已尝试使用会话属性,但它们要求将流绑定在一起作为子流或端点.
谢谢.
我们有一个Mule应用程序,其中有6个或7个流,每个流有大约5个组件。这是设置。我们将JMS请求发送到ActiveMQ队列。ule子听了。根据消息的内容,我们将其转发到相应的流。
<flow name="MyAPPAutomationFlow" doc:name="MyAPPAutomationFlow">
<composite-source>
<jms:inbound-endpoint queue="MyAPPOrderQ" connector-ref="Active_MQ_1" doc:name="AMQ1 Inbound Endpoint"/>
<jms:inbound-endpoint queue="MyAPPOrderQ" connector-ref="Active_MQ_2" doc:name="AMQ2 Inbound Endpoint"/>
</composite-source>
<choice doc:name="Choice">
<when expression="payload.getProcessOrder().getOrderType().toString().equals("ANC")" evaluator="groovy">
<processor-chain>
<flow-ref name="ProcessOneFLow" doc:name="Go to ProcessOneFLow"/>
</processor-chain>
</when>
<when....
...........
</choice>
</flow>
<flow name="ProcessOneFLow" doc:name="ProcessOneFLow">
<vm:inbound-endpoint exchange-pattern="one-way" path="ProcessOneFLow" responseTimeout="10000" mimeType="text/xml" doc:name="New Process Order"/>
<component doc:name="Create A">
<spring-object bean="createA"/>
</component>
<component doc:name="Create B">
<spring-object bean="createB"/>
</component>
<component doc:name="Create C">
<spring-object bean="createC"/>
</component>
<component doc:name="Create D">
<spring-object bean="createD"/>
</component>
</flow>
<spring:beans>
<spring:import resource="classpath:spring/service.xml"/>
<spring:bean id="createA" name="createA" class="my.app.components.CreateAService"/>
<spring:bean id="createB" …Run Code Online (Sandbox Code Playgroud) 在WSO2 ESB代理服务中,我如何根据某些webservice响应中的整数值进行迭代,就像"foreach"一样:
例如这样的响应消息:
<Response>
<noOfcustomers>10</noOfCustomers>
</Response>
Run Code Online (Sandbox Code Playgroud)
我需要迭代10次(根据客户数量)
这可能吗?我怎样才能实现这一目标?
谢谢你的帮助!
这就是我想要做的.我必须阅读两个包含此内容的文件
<Person>
<Requestor>Dinesh</Requestor>
</Person>
Run Code Online (Sandbox Code Playgroud)
为此,我创建了一条路线
<route id="getPerson">
<from uri="file:src/main/resources/xml?noop=true"/>
</route>
Run Code Online (Sandbox Code Playgroud)
接下来我需要读取另一个名为Address的文件
<Address>
<City>New York </City>
</Address>
Run Code Online (Sandbox Code Playgroud)
这是我的第二条路线
<route id="getAddress">
<from uri="file:src/main/resources/xmlAddress?noop=true"/>
</route>
Run Code Online (Sandbox Code Playgroud)
如何将这两个xmls合并为一个使用Enricher或Aggregate来使最终的xml消息看起来像这样
<Person>
<Requestor>Dinesh</Requestor>
<Address>
<City>New York</City>
</Address>
</Person>
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?我尝试按照文档进行操作,但所有内容都是发送给某些Web服务uri.
上面的场景是我真正想要做的版本.我的实际情况是这样做 - 步骤1.读取xml文件,步骤2:调用Web服务并获得响应.步骤3:在步骤2中合并响应并在步骤1中将其添加到Xml主体中
编辑1:我可以编写自定义的AggregatorStartegy类.我写了这样的东西
public class AggregationStrategy implements org.apache.camel.processor.aggregate.AggregationStrategy{
@Override
public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
newExchange.getOut().setBody("<all>"
+ oldExchange.getIn().getBody(String.class)
+ newExchange.getIn().getBody(String.class)
+ "</all>");
return newExchange;
}
}
Run Code Online (Sandbox Code Playgroud)
我正在努力的是如何编写Spring xml,我可以告诉我的是我的消息或文件1+消息或文件2,加入他们.这是我的实际context.xml的样子
<camelContext id="myCamel" xmlns="http://camel.apache.org/schema/spring">
<route>
<from uri="file:src/main/resources/xmlPerson?noop=true"/>
<camel:to uri="direct:enrichMessage"></camel:to>
</route>
<route >
<from uri="file:src/main/resources/xmlAddress?noop=true"/>
<log message="**************RESPONSE FROM CATASK DSS:: …Run Code Online (Sandbox Code Playgroud)