Spring集成 - 使用消息转换器将一个通道路由到特定通道

时间:2015-10-09 09:47:39

标签: spring spring-integration

是Spring Integration的新手

我的目标是将消息传递到另一个频道(链接过程)

频道1 ---> chennal2 - > chennal3 ---> chennal4。 (Msg1)(Msg2)(Msg3)(Msg4)

\ \ / /

\ \ / /

errorChennal(Msg5)

1。 Msg1(EmployeeObject),Msg2(DetailsObjet),Msg3(VerificationObject),Msg4(FinalObject),Msg5(ErrorObject)

    Each channel payloads will have different Class Objects.
  1. 如果出现异常,验证错误等,则需要将所有通道传递给“errorChennal”。
  2. 尝试: 1.当我尝试使用@transformer时,我无法与“erroeChannel”进行通信。

    1. 当我尝试使用@Router(header-value-router)时,消息转换没有讨厌。 Msg1对象是所有对象
    2. 问题: 如何使用消息转换器将一个通道路由到特定通道?

      找到答案

      Configuration:
      
      <int:channel id="channel1"/>
      <int:channel id="channel2"/>
      <int:channel id="channel3"/>
      <int:channel id="channel4"/>
      
      <int:service-activator input-channel="channel1" ref="firstChannel" method="doProcess1" />
      <int:service-activator input-channel="channel2" ref="secondChannel" method="doProcess2" />
      <int:service-activator input-channel="channel3" ref="thirdChannel" method="doProcess3" />
      <int:service-activator input-channel="channel4" ref="forthChannel" method="doProcess4" />
      <int:service-activator input-channel="errorChannel" ref="errorHandlerChannel" method="doErrorProcess" />
      
      Java Code: 
      
      public FirstChannel {
      
          private Map<String, MessageChannel> msgChannels;
          boolean isError = false;
          @Autowired
          public ScheduleParser(Map<String, MessageChannel> msgChannels) {
              super();
              this.msgChannels = msgChannels;
          }
      
          public void doprocess1(Message<?> message){
          File file = (File) message.getPayload();
          //business code 
      
          if(!isError)
              //transforming the messae
              msgChannels.get("channel2").send(new GenericMessage(EmployeeVO , headersMap));
          else 
              msgChannels.get("errorChannel").send(new GenericMessage(ObjectVO , headersMap));
      }
      

      }

      同样的方式其他渠道代码

1 个答案:

答案 0 :(得分:0)

频道没有相互连接,它们连接到端点。

变形金刚没有路由,路由器路由。

你需要像

这样的东西
channel1->payload-type-router

type1Channel->...
type2Channel->...
...

可能为下游的每个有效负载类型使用不同的变压器。

通常更好地展示您尝试过的配置,而不是像您所展示的那样抽象。

错误流配置取决于启动流(网关,轮询器等)的内容 - 即channel1的上游。

修改

您的配置完全错误。例如,您目前在channel1上有两个订阅者 - 标头值路由器和服务激活器。

到达channel1的消息将交替转到其中一个消息 - 前往服务激活器的消息将从不转到路由器。

在不知道完整图片的情况下,我猜你需要像...这样的东西。

channel1->serviceActivator1->channel1toRouter->router(channel2 or failed)
channel2->serviceActivator2->channel2toRouter->router(channel2 or failed)
...