当前位置: 首页 > 知识库问答 >
问题:

Spring集成出站通道适配器目标表达式MQMDMessageContext

汪阳飇
2023-03-14

我正在使用Spring集成jms出站通道适配器,它将消息发送到动态队列。我使用属性destination expression=“headers.DestinationQueueName”。在将出站消息写入OUT\U MSG通道之前,在代码中设置DestinationQueueName。

如何在队列上设置这些属性:MQMDMessageContextMQMDReadEnabledMQMDWriteEnabled

共有2个答案

裘安阳
2023-03-14

动态目标名称标头表达式很好。只需为JmsTemplate实例配置一个自定义目标解析器。

@Bean
public MQDestinationResolver mqDestinationResolver() {
    return new MQDestinationResolver();
}

public class MQDestinationResolver extends DynamicDestinationResolver implements CachingDestinationResolver {
        private final Map<String, Destination> destinationCache = new ConcurrentHashMap<>(16);
        private boolean cache = true;

        public void setCache(boolean cache) {
            this.cache = cache;
        }


    @Override
    public Destination resolveDestinationName(@Nullable Session session, String destinationName, boolean pubSubDomain)
            throws JMSException {
        Destination destination = this.destinationCache.get(destinationName);
        if (destination == null) {
            destination = super.resolveDestinationName(session, destinationName, pubSubDomain);
            MQDestination mqDestination = (MQDestination) destination;
            // Set IBM MQ specific destination properties
            mqDestination.setMQMDReadEnabled(true);
            mqDestination.setMQMDWriteEnabled(true);
            mqDestination.setMessageBodyStyle(WMQConstants.WMQ_MESSAGE_BODY_UNSPECIFIED);
            mqDestination.setTargetClient(WMQConstants.WMQ_CLIENT_JMS_COMPLIANT);
            if (this.cache) {
                this.destinationCache.put(destinationName, destination);
            }
        }
        return destination;
    }

    @Override
    public void removeFromCache(String destinationName) {
        this.destinationCache.remove(destinationName);
    }

    @Override
    public void clearCache() {
        this.destinationCache.clear();
    }
}
公羊嘉
2023-03-14

不如把DestinationQueueName字符串放到com的头上。ibm。mq。jms。MQQueue对象,当然还有那些选项?

 类似资料:
  • 问题内容: 入站和出站通道适配器之间的根本区别是什么? 任何示例都将非常有帮助。 我已经查看过Spring文档,这种“方向性”的区别对我来说还不清楚。我支持配置了outbound-channel-adapter的应用程序,但是我发现使用 出站 标签可以直观地了解行为计数器。该适配器获取一个外部文件,然后 将其 引入应用程序中, 在 该应用程序中我们解析文件并保留数据。 这类似于这个问题,但是我想更

  • 使用Spring Integration Kafka,使用出站通道适配器,我尝试向名为“test”的主题发送消息 通过命令行终端,我启动了动物园管理员、kafka并创建了名为“test”的主题 Spring XML配置 JUnit测试代码 测试用例成功,在调试时,我发现channel.send()返回true 我使用下面的命令通过命令行检查了主题,但是我在测试主题中看不到任何消息。 bin/kaf

  • 如何通过注释而不是常规配置文件配置入站通道适配器?我可以为会话工厂定义bean,如下所示: 如何配置通过注释下给出的入站通道适配器? 我正在寻找的是在应用程序启动时连接所有bean,然后公开一些方法来开始轮询服务器,处理它们,然后从本地删除它们,类似于 其中getPollableChannel()为我提供了用于轮询的bean。

  • 我有一个模型对象,它是在多次转换和解析之后填充的。现在,我需要使用spring集成将模型中的消息属性发送给kafka。我可以使用messageKey方法构造键,但如何从m.getPayload()之类的模型中获取实际消息。getMessage()并将其发送给Kafka。

  • 问题内容: Spring Integration FTP中的入站通道适配器和出站通道适配器之间有什么区别?我应该使用哪一个?何时使用? 我从文档中了解到,出站可以发送任何类型的文件(例如byte [],String,java.io.File),但入站仅限于文件类型。那仅仅是区别还是其他? 问题答案: 我建议您首先阅读理论 。 任何Inbound适配器都旨在从外部系统获取数据。Outbound-放置