Spring Integration学习笔记:通道(Message Channel)的架构和使用

本文是自己的学习笔记,主要参考资料如下:

  • https://docs.spring.io/spring-integration/docs/current/reference/html/index-single.html#messaging-routing-chapter

  • 1、通道类架构
    • 1.1、PollableChannel
    • 1.2、SubscribableChannel
    • 1.3、通道的实现类
  • 2、通道类的使用
    • 2.1、创建简单的通道bean
  • 3、Message Channel的常用实现类
    • 3.1、PublishSubscribeChannel
      • 3.1.1 总结


1、通道类架构

通道的基础抽象类是MessageChannel,定义的接口方法非常简单,只有两个,都是关于发送的,如下所示。

public interface MessageChannel {

    boolean send(Message message);

    boolean send(Message message, long timeout);
}

方法的意义很简单不多解释。只要知道,如果发送成功,返回true;因为各种原因发送失败,返回false

因为Integration中,支持点对点』(point-to-point)和『订阅-发布』(publish-subscribe)两种模式(具体看下面的链接),这两种模式接受信息的方式不一样,所以MessageChannel中只定义了发送信息的方法,接受信息的方法则放到其子类中定义。

https://blog.csdn.net/sinat_38393872/article/details/110819562



1.1、PollableChannel

PollableChannel``继承MessageChannel```,代码如下

public interface PollableChannel extends MessageChannel {
	/* return null if something is wrong, so is the next method. */
    Message<?> receive();
    Message<?> receive(long timeout);
}

当有信息发送到PollableChannel通道时,通道需要主动调用receive方法接受信息。在这一过程中信息必然要在通道中缓存一段时间,所以PollableChannel是支持缓存的。而下面的SubscribableChannel,它订阅的节点一发信息过来,它就得立刻接受并处理,中间没有余地来缓存。

1.2、SubscribableChannel

SubscribableChannel也继承MessageChannel,代码如下

public interface SubscribableChannel extends MessageChannel {
    boolean subscribe(MessageHandler handler);
    boolean unsubscribe(MessageHandler handler);
}

这种订阅发布模式的通道会直接关联上一个MessageHandler的实例。当这个messageHandler发送信息时,会直接发送到对应的订阅者上,所以SubscribableChannel不需要提供缓存的功能。



1.3、通道的实现类

通道的基本架构就是上面的内容,而通道的实现类都是在上面的架构之中。那些实现类的具体内容等以后有时间再写吧。





2、通道类的使用

2.1、创建简单的通道bean

下面是使用XML配置创建一个最简单的通道实例

<int:channel id="exampleChannel"/>

这个方法创建的实例类型是DirectChannel,等价于下面的Java代码

@Bean
public MessageChannel exampleChannel() {
    return new DirectChannel();
}

DirectChannel是『点对点』(point-to-point)类型的通道,如果想要创建『发布-订阅』类型的通道则要用下面的方式定义

<int:publish-subscribe-channel id="exampleChannel"/>

这个创建了一个PublishSubscribeChannel等同于下面的Java代码

@Bean
public MessageChannel exampleChannel() {
    return new PublishSubscribeChannel();
}

以上是创建简单的通道bean的方法。其他类型的通道,比如QueueChannelPriorityChannel等创建方法以后有时间再写。




3、Message Channel的常用实现类

3.1、PublishSubscribeChannel

从名字上就能看出,该通道既可以作发布者,也可以作订阅者。它从它订阅的Channel获取信息,然后将信息传给订阅它的其他节点。

PublishSubscribeChannel只是继承了SubscribableChannel,并没有继承PollableChannel,所以PublishSubscribeChannel并不提供缓存的功能。



3.1.1 总结

  • 是一个完整的『订阅发布』通道的实现类,需要订阅发布场景时优先使用它。
  • 接收信息时不提供缓存功能。也就是说,PublishSubscribeChannel实例s订阅的节点p发布信息时,s必须立刻接收信息并处理。不存在p发布信息后,s过一段时间再自己去拿的情况

你可能感兴趣的:(Spring,Integration)