关于ESB问答

关于ESB问答

最近公司要上一个新项目。可能要整合以前的一些系统。现在考虑是用esb企业总线进行管理。初步定的是wso2。基于apache synapse。

1.一般的esb流程是什么样子的?
是不是主系统发生soap请求。esb接收并且转换成jms然后子系统监听jms。最后得到数据。
还是。jms仅仅是内部转换。soap请求在esb转成jms后。加入队列。然后再转成soap调用子系统?

2.使用jms的考虑是jms对队列的信息进行持久化。防止比如子系统突然挂掉了。消息丢失。
但是有个问题。是esb自动监听jms的队列的话。会导致直接消费了。而数据没有存在队列中。还是会出现消息丢失的问题。
这个应该怎么解决。

3.esb进行协议之间的转换。每种方式都需要些一个转换方式么?有没有什么通用的。或者是自动转换的。比如soap和jms的互相转换。不是协议切换。是内容转换。

4.如果大家有讨论esb的群。或者有高手愿意指点一下。谢谢了。   


------------------------------------------------------------------
1,一般ESB的流程,
先是整理需连接的系统,需要连接的系统功能(一般管它叫服务),确定服务的依赖关系,支持的协议(文件,WebService, RPC,...),调用的方式(同步/异步)
然后使用ESB提供的那些协议组件,一点点串起来就行。串的方式可以参考EIP (www.eaipatterns.com)

你说的两种异步方式的话都可以,
如果是同步的,也可以直接soap -> soap, 不用JMS。 一般用JMS是为了实现异步通讯

2,JMS,至少我接触的ActiveMQ, 是可以支持事务的,发生异常,可以不消费信息

3,协议转换是为了配合你那些需要整合的系统,如果都是SOAP,也就不需要转了。
消息内容转换(格式,内容),一般ESB都提供各种工具的。 



------------------------------------------------------------------
1、如果你要做同步转异步,可以在esb上做成ws转jms,然后起到一个缓冲的作用。
最后可以再同步的返回给调用方。
你也可以修改调用方为jms方式,这样就是彻底的异步了,在esb端可以jms转ws,调用业务服务方的ws。

2、esb都支持事务的,jms中如果不确认消息的话,不会从持久存储去delete掉的。
一般的esb。也可以做成是esb消费掉消息,然后存入esb自己内置的jms provider中,这样你再消费的话,也是可靠的。还可以做成补偿机制的,即esb中如何消息处理失败,把消费放回去原来的queue或是一个中间的临时queue,稍后做recover。

3、从esb的不同transport进去的数据,在esb的中介层处理时,其实消息格式都是一致的、通用的。也就是说常见的ws或jms转换在一般的esb里处理都很简单。如果稍微复杂点,也很容易扩展transformer(比如通过xslt做xml格式转换)来实现数据内容和格式的转换。

你可能感兴趣的:(关于ESB问答)