企业集成模式与ServiceMix--接收表模式

来源:互联网 发布:c语言指针题目 编辑:程序博客网 时间:2024/05/18 00:54

1.读者要求
   了解企业集成模式,了解ServiceMix.

2.接收表模式
    关于接收表模式在Mule中的实现,我已经作了简单介绍,见《企业集成模式与Mule--接收表模式》一文。
    本文简要介绍接收表模式在ServiceMix中的实现以及简单应用。

3.实现

下面简单地介绍接收表模式在ServiceMix中的实现

在ServiceMix中StaticRecipientList简单地实现了一个静态的接收表模式。
通过它可以将In-Only或者Robust-In-Only消息交互模式的消息转发到recipients列表,该列表中的接收者都可以接收到该消息。

其主要方法的代码片段:

            ....
        //复制消息exchange,将消息in作为其副本
        NormalizedMessage in = MessageUtil.copyIn(exchange);
        //根据recipient的个数,同步或异步循环发送消息
        for (int i = 0; i < recipients.length; i++) {
        
            MessageExchange me = getExchangeFactory().createExchange(
                    exchange.getPattern());
            recipients.configureTarget(me, getContext());
            in.setProperty(RECIPIENT_LIST_COUNT, new Integer(
                            recipients.length));
            in.setProperty(RECIPIENT_LIST_INDEX, new Integer(i));
            in.setProperty(RECIPIENT_LIST_CORRID, exchange.getExchangeId());
            //将消息in中的相关属性以及附件等内容拷贝到消息me中
            MessageUtil.transferToIn(in, me);
      //采用同步的方式发送消息me,该方法调用DeliveryChannel的sendSync()方法同步发送消息
      //如果是采用同步的方式发送,则调用DeliveryChannel的send()方法异步步发送消息
            sendSync(me);//同步发送
            if (me.getStatus() == ExchangeStatus.ERROR && reportErrors) {
                fail(exchange, me.getError());
                return;
            }
        }
    //将消息exchange的状态设置为ExchangeStatus.DONE,表明消息发送完毕
        done(exchange);
.....

4.简单应用

在ServiceMix中使用静态接收表模式
  <eip:static-recipient-list service="test:recipients" endpoint="endpoint">
                        <eip:recipients>
                          <eip:exchange-target service="recipient1" />
                          <eip:exchange-target service="recipient2" />
                          <eip:exchange-target service="recipient3" />
                        </eip:recipients>
    </eip:static-recipient-list>
在此我们在static-recipient-list上设定了3个recipient,分别是recipient1,recipient2和recipient3。
ServiceMix会将消息分发给这3个recipient,我们可以在这3个recipient上接收到相同的消息。

原创粉丝点击