rube3xxx_Rube GoldbergSpring整合

rube3xxx

Spring Integration为集成系统所涉及的一些复杂性提供了非常好的抽象-Spring Integration从Integration的角度完美地满足了Facade的定义-简化了对复杂基础系统的访问。

为了说明这一点,请考虑一个简单的系统,该系统仅接收一条消息,然后将其发送回大写,称其为Echo网关:

public interface EchoGateway { 
    String echo(String message);
}

并为此进行测试:

@Test
 public void testEcho() {
  String response = echoGateway.echo('Hello');
  assertThat(response, is('HELLO'));
 }

到目前为止听起来很简单,使用spring集成的实现将通过转换为大写并返回增强后的消息来接受“消息”并对其进行“转换”。

<?xml version='1.0' encoding='UTF-8'?>
<beans:beans xmlns='http://www.springframework.org/schema/integration'
 xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
 xmlns:beans='http://www.springframework.org/schema/beans'
 xsi:schemaLocation='
  http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration-2.1.xsd
  http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd'>
  
  <channel id='requestChannel'/>
  
  <gateway id='echoGateway' service-interface='rube.simple.EchoGateway' default-request-channel='requestChannel' />
  
  <transformer input-channel='requestChannel' expression='payload.toUpperCase()' />  
  
</beans:beans>

作品精美!

Spring Integration的优点在于,即使Integration场景变得复杂,它呈现给应用程序的外观仍然保持简单,

考虑一个Rube Goldberg集成方案:

首先是描述旋流的图表:

那么它到底是做什么的:

  • 它接收到这样的消息-“来自Spring整合的你好”,
  • 将其拆分为单个词(您好,来自,春天,完整),
  • 将每个单词发送到ActiveMQ队列,
  • 从队列中,单词片段被浓缩器拾取以大写每个单词,
  • 将响应放回响应队列,
  • 根据单词的原始顺序对其进行重新排序,
  • 聚合成一个句子(“ HELLO FROM SPRING INTEG”),
  • 返回到应用程序。

这是这种流程的Spring Integration配置的样子:

<?xml version='1.0' encoding='UTF-8'?>
<beans:beans xmlns='http://www.springframework.org/schema/integration'
 xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
 xmlns:int-jms='http://www.springframework.org/schema/integration/jms'
 xmlns:beans='http://www.springframework.org/schema/beans'
 xsi:schemaLocation='
  http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-3.0.xsd
  http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration-2.1.xsd
  http://www.springframework.org/schema/integration/jms http://www.springframework.org/schema/integration/jms/spring-integration-jms-2.1.xsd
  http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd'>
  
  <beans:import resource='broker.xml'/>

  <channel id='requestChannel'>
   <queue/>  
  </channel>
  
  <channel id='responseChannel'>
   <queue/>
  </channel>

  <gateway id='echoGateway' service-interface='rube.complicated.EchoGateway' default-request-channel='requestChannel' default-reply-channel='responseChannel' default-reply-timeout='5000' />
  
  <channel id='toJmsOutbound'/>
  
  <splitter input-channel='requestChannel' output-channel='toJmsOutbound' expression='payload.split('\s')'>
  </splitter>
  
  <channel id='sequenceChannel'>
  </channel>

  <int-jms:outbound-gateway request-channel='toJmsOutbound' reply-channel='sequenceChannel' request-destination='amq.outbound' extract-request-payload='true' />

  <channel id='enhanceMessageChannel'/>
  <channel id='toReplyQueueChannel'/>
  
  <int-jms:inbound-gateway request-channel='enhanceMessageChannel' request-destination='amq.outbound' reply-channel='toReplyQueueChannel'/>

  <transformer input-channel='enhanceMessageChannel' expression='(payload + '').toUpperCase()' output-channel='toReplyQueueChannel'/>
  
  <resequencer input-channel='sequenceChannel' output-channel='aggregateChannel' release-partial-sequences='false'></resequencer>
  
  <aggregator input-channel='aggregateChannel' output-channel='responseChannel'  expression='T(com.google.common.base.Joiner).on(' ').join(![payload].toArray())'/>
  
  <poller id='poller' fixed-delay='500' default='true'/>
  
</beans:beans>

这个流程有太多的复杂性(因此,Rube Goldberg也是如此),但是Spring Integration提供给应用程序的外观仍然非常简单。

@Test
 public void testEcho() throws Exception{
  String amessage = 'Hello from Spring Integration';
  
  String response = echoGateway.echo(amessage);
  assertThat(response, is('HELLO FROM SPRING INTEGRATION'));
 }

我认为这是Spring Integration的本质

我在https://github.com/bijukunjummen/rg-si.git上有一个包含此代码的github存储库。

参考: all和其他博客中的Rube Goldberg Spring Integration,来自我们的JCG合作伙伴 Biju Kunjummen。


翻译自: https://www.javacodegeeks.com/2012/06/rube-goldberg-spring-integration_22.html

rube3xxx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值