栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

消息通道是一个还是多个?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

消息通道是一个还是多个?

在每个子上下文中,您都可以添加标头扩展器,以将自定义标头设置为来自适配器的URL。输出通道是共享服务的共享通道。

在服务中使用

void foo(Message emailMessage, @Header("myHeader") String url)

我通常建议使用单个服务,除非该服务需要根据源代码做根本不同的事情。

编辑

我修改了您对上一个问题的答案,以使用标头中的url来增强原始消息;每个实例都有自己的头扩展器,它们都将扩展后的消息路由到公共端

emailChannel

@Configuration@EnableIntegrationpublic class GeneralImapAdapter {    @Value("${imap.url}")    String imapUrl;    @Bean    public static PropertySourcesPlaceholderConfigurer pspc() {        return new PropertySourcesPlaceholderConfigurer();    }    @Bean    @InboundChannelAdapter(value = "enrichHeadersChannel", poller = @Poller(fixedDelay = "10000") )    public MessageSource<javax.mail.Message> mailMessageSource(MailReceiver imapMailReceiver) {        return new MailReceivingMessageSource(imapMailReceiver);    }    @Bean    public MessageChannel enrichHeadersChannel() {        return new DirectChannel();    }    @Bean    @Transformer(inputChannel="enrichHeadersChannel", outputChannel="emailChannel")    public HeaderEnricher enrichHeaders() {        Map<String, ? extends HeaderValueMessageProcessor<?>> headersToAdd =     Collections.singletonMap("emailUrl", new StaticHeaderValueMessageProcessor<>(this.imapUrl));        HeaderEnricher enricher = new HeaderEnricher(headersToAdd);        return enricher;    }    @Bean    public MailReceiver imapMailReceiver() {        MailReceiver receiver = mock(MailReceiver.class);        Message message = mock(Message.class);        when(message.toString()).thenReturn("Message from " + this.imapUrl);        Message[] messages = new Message[] {message};        try { when(receiver.receive()).thenReturn(messages);        }        catch (MessagingException e) { e.printStackTrace();        }        return receiver;    }}

…并且我修改了接收服务,以便可以访问标头…

@MessageEndpointpublic class EmailReceiverService {    @ServiceActivator(inputChannel="emailChannel")    public void handleMessage(Message message, @Header("emailUrl") String url) {        System.out.println(message + " header:" + url);    }}

希望有帮助

编辑2

而且这有点复杂;它从有效负载中提取并将其放入标头中;因为您有完整的消息,所以用例不需要它,但是它说明了该技术…

@Bean@Transformer(inputChannel="enrichHeadersChannel", outputChannel="emailChannel")public HeaderEnricher enrichHeaders() {    Map<String, HeaderValueMessageProcessor<?>> headersToAdd = new HashMap<>();    headersToAdd.put("emailUrl", new StaticHeaderValueMessageProcessor<String>(this.imapUrl));    expression expression = new SpelexpressionParser().parseexpression("payload.from[0].toString()");    headersToAdd.put("from", new expressionevaluatingHeaderValueMessageProcessor<>(expression, String.class));    HeaderEnricher enricher = new HeaderEnricher(headersToAdd);    return enricher;}

@ServiceActivator(inputChannel="emailChannel")public void handleMessage(Message message, @Header("emailUrl") String url,          @Header("from") String from) {    System.out.println(message + " header:" + url + " from:" + from);}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/382803.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号