【问题标题】:Spring Cloud Stream default custom message headersSpring Cloud Stream 默认自定义消息头
【发布时间】:2017-11-18 04:22:26
【问题描述】:

从方法返回值生成消息时,有没有办法配置默认的Message<T>标头:

@Publisher(channel = "theChannelname")
public MyObject someMethod(Object param) {
    ...
    return myObject;
}

@SendTo("theChannelname")
public MyObject someMethod(Object param) {
    ...
    return myObject;
}

在上面的示例中,Message<MyObject> 将自动生成。

那么,如何控制默认消息生成?

【问题讨论】:

    标签: spring spring-cloud spring-cloud-stream spring-kafka


    【解决方案1】:

    并非如此 - 假设是如果您返回一个有效负载,那么您就不太关心标头。您可以让该方法返回 Message 并在那里添加您自己的标题。

    【讨论】:

      【解决方案2】:

      您可以通过 @Header 方法参数的注释来做到这一点:

      @Publisher(channel="testChannel")
      public String defaultPayload(String fname, @Header("last") String lname) {
        return fname + " " + lname;
      }
      

      http://docs.spring.io/spring-integration/reference/html/message-publishing.html#publisher-annotation

      【讨论】:

      • 我将答案标记为已接受,因为它包含有效的解决方案。但是,我不想通过基础设施操作影响我的界面......还是我错过了什么?
      • 没有“基础设施操作”。这正是@Publisher 的工作原理:docs.spring.io/spring-integration/reference/html/…。您可能真的考虑从您的方法中返回整个 Message 来实现标头传输要求。
      • 我有一个接口方法:Result createRecord(Object data),在实现中,我想将结果发送到 Kafka 主题。假设我无法更改界面...而且我不想编写代码来做到这一点:) 即channel.send(Message<T> message)
      • 是否可以通过注入我自己的MessageConverter 来影响Message 创建过程?
      • 如果是@Publsiher,您可以考虑将MessagePublishingInterceptor 与提供的PublisherMetadataSource 一起使用。如果@SendTo 是的,我认为MessageConverter.toMessage() 应该为您解决问题
      猜你喜欢
      • 1970-01-01
      • 2019-02-02
      • 2018-07-18
      • 2019-01-23
      • 2020-09-28
      • 2021-06-12
      • 1970-01-01
      • 2020-12-22
      • 2020-11-02
      相关资源
      最近更新 更多