【问题标题】:Inject or filter collection to get only ouput channels注入器过滤器集合以仅获取输出通道
【发布时间】:2020-09-22 12:02:43
【问题描述】:

如果我使用

@Autowired
List<MessageChannel> messageChannels;

我得到所有频道。 通道是输入,也是输出。 我如何才能在此处仅获取 outputs 频道?

这个对象的类是org.springframework.integration.channel.DirectChannel

我想删除标记为@Input 的类对象 instanceof org.springframework.messaging.SubscribableChannel

messageChannels 的每个对象都给出:

object instanceof org.springframework.messaging.MessageChannel = true
object instanceof org.springframework.messaging.SubscribableChannel = true

我不想通过name 过滤它们。

【问题讨论】:

    标签: spring-boot spring-cloud spring-cloud-stream


    【解决方案1】:

    以下内容仅适用于spring-cloud-stream

    您无法使用@Autowired 过滤它们,但如果您注入List&lt;DirectWithAttributesChannel&gt;,则可以使用getAttribute("type") 确定通道类型,这将是Sink.INPUTSource.OUTPUT 之一。

    【讨论】:

    • DirectWithAttributesChannel 是什么意思?就我而言,我无法导入它。我想从整个应用程序中获取Source.OUTPUTs,而不仅仅是从一个类中获取。
    • 我用org.springframework.cloud:spring-cloud-dependencies:Edgware.SR4spring-cloud-stream 1.3.3在应用程序上测试了它
    • 那个版本太旧了; DirectWithAttributesChannel 在 2.1 中被添加(正是为了这个目的)。对于旧版本,您所能做的就是将频道转换为 NamedComponent 并检查其名称。
    猜你喜欢
    • 2018-10-29
    • 2011-04-06
    • 2021-08-08
    • 2017-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多