gpt4 book ai didi

java - spring 与 activemq 集成

转载 作者:行者123 更新时间:2023-12-01 10:30:53 24 4
gpt4 key购买 nike

我使用 Spring 大约一年了,一切都非常明显和简单,直到我面对 Spring 集成。惭愧,我无法创建出站网关来将消息发送到远程 JMS (ActiveMQ) channel 。集成之前我只是直接使用JmsTemplates和@JmsListeners,完全没有问题。

  1. request-destinationrequest-channel 有什么区别?
  2. 这是我的配置:

        @Configuration
    @EnableJms
    public class JmsConfig {
    ...


    @Value("${activemq.url}")
    private String brokerUrl;


    @Bean
    public JmsTemplate jmsTemplate() {
    JmsTemplate jmsTemplate = new JmsTemplate(queueConnectionFactory());
    jmsTemplate.setDefaultDestinationName(bookingChannelName);
    return jmsTemplate;
    }
    /*
    @Bean(name = "bookingChannel")
    public Queue activeMQQueue() {
    return new ActiveMQQueue(bookingChannelName);
    }
    */


    @Bean
    public JmsListenerContainerFactory jmsListenerContainerFactory() {
    SimpleJmsListenerContainerFactory listenerFactory = new SimpleJmsListenerContainerFactory();
    listenerFactory.setConnectionFactory(queueConnectionFactory());
    return listenerFactory;
    }
    ...

    }

    还有一个 xml 元素,我在根 beans 元素中得到的所有内容是:

    <jms:outbound-gateway request-destination-name="reqDestination" request-channel="bookingChannel" />

    然后,有一个网关代码:

    @MessagingGateway
    public interface BookingGateway<T> {

    @Gateway
    void bookTicket(T ticket);
    }

    最后,这是我如何使用网关:

    @Component
    public class BookingGatewayImpl<T> {


    @Autowired
    private BookingGateway bookingGateway;

    public <U> void bookTicket(T ticket, BiConsumer<T, U> onStatusReceived) {
    bookingGateway.bookTicket(ticket); // second param is not utilized yet
    }
    }

当即将订票时,我得到:

send is not supported, because no request channel has been configured

此外,我无法从第一个列表中取消注释 ActiveMQQueue bean,因为 spring 说它与 MessageChannel 不兼容:

Bean named 'bookingChannel' must be of type [org.springframework.messaging.MessageChannel], but was actually of type [org.apache.activemq.command.ActiveMQQueue]

为什么哦为什么目的地应该是 MessageChannel 类型?我到底做错了什么以及如何发送此票证消息?

最佳答案

bookingChannelMessagingGateway 和 jms 网关之间的 MessageChannel。目的地是 AMQP 队列。

使用

@Gateway(requestChannel="bookingChannel")

@Bean(name = "bookingDestination")
public Queue activeMQQueue() {
return new ActiveMQQueue(bookingChannelName);
}

@Bean(name = "bookingChannel")
public MessageChannel bookingChannel() {
return new DirectChannel();
}

<jms:outbound-gateway request-destination-name="bookingDestination" request-channel="bookingChannel" />

关于java - spring 与 activemq 集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35104220/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com