spring-jms 相关问题

Spring提供了一个JMS集成框架,它简化了JMS API的使用,就像Spring对JDBC API的集成一样。

Spring Boot JMS 没有 JmsTemplate bean 可用

我正在尝试从我的应用程序使用 JMS 发送消息。 我在我的 pom 中添加 org.springframework spring-jms 我正在尝试从我的应用程序使用 JMS 发送消息。 我添加到我的pom中 <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jms</artifactId> </dependency> <dependency> <groupId>javax.jms</groupId> <artifactId>jms</artifactId> <version>1.1</version> </dependency> 春天开始说 JmsTemplate 和 ConnectionFactory 由 Spring Boot 自动创建。在这种情况下,ActiveMQ 代理以嵌入式方式运行。 在我的批处理编写器中 @Autowired JmsTemplate jmsTemplate, void writer(List<String> items) { jmsTemplate.convertAndSend(items); } 但是没有找到bean JmsTemplate 没有“org.springframework.jms.core.JmsTemplate”类型的合格 bean 可用:预计至少有 1 个有资格作为自动装配候选者的 bean 我尝试在@configuration中添加消息转换器 @Bean public MessageConverter jacksonJmsMessageConverter() { MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter(); converter.setTargetType(MessageType.TEXT); converter.setTypeIdPropertyName("_type"); return converter; } 我尝试添加@EnableJMS(即使它只是为了监听器......) 但是没用... 我不明白为什么,在教程上看起来很简单...... 为了工作,我们需要创建一个 jmsTemplate bean @Bean public ConnectionFactory getConnectionFactory() { TibjmsConnectionFactory connectionFactory = new TibjmsConnectionFactory(urlBrocker); return connectionFactory; } @Bean public JmsTemplate jmsTemplate() { JmsTemplate template = new JmsTemplate(); template.setConnectionFactory(getConnectionFactory()); template.setPubSubDomain(false); // false for a Queue, true for a Topic return template; } 在 Spring Boot 与 ActiveMQ Artemis 的上下文中,要求只是将 spring-boot-starter-artemis (撰写本文时为 v3.2.6)作为 Maven POM 中的依赖项。检测到 Artemis 位于类路径上时,Spring boot 将根据您在 application.properties 中的设置,在应用程序上下文中自动配置名为“jmsTemplate”和“jmsConnectionFactory”的两个 bean,例如 REMOTE Artemis 代理的示例(上面的 starter-artemis 依赖项仅适用于客户端,无嵌入式服务器): spring.artemis.mode=native spring.artemis.broker-url=tcp://localhost:8090?jms.clientID=myclientId spring.artemis.user=myuser spring.artemis.password=mypassword 注意:像spring.artemis.pool.enabled=true这样的额外参数可能会默默地破坏自动装配!!! 最小Spring boot应用程序可以像这样'ConnectorTestApplication.java': package broker.connectorTest; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.jms.DefaultJmsListenerContainerFactoryConfigurer; import org.springframework.context.ApplicationContext; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.jms.annotation.EnableJms; import org.springframework.jms.config.DefaultJmsListenerContainerFactory; import org.springframework.jms.config.JmsListenerContainerFactory; import org.springframework.jms.core.JmsTemplate; import jakarta.jms.ConnectionFactory; @SpringBootApplication // is equivalent to @Configuration + @EnableAutoConfiguration + @ComponentScan @EnableJms public class ConnectorTestApplication { public static void main(String[] args) { ConfigurableApplicationContext ctx = SpringApplication.run(ConnectorTestApplication.class, args); // simplest example for sending one message JmsTemplate jmsTemplate = ctx.getBean(JmsTemplate.class); jmsTemplate.send("TestQ1",session -> session.createTextMessage("hello world!")); } @Bean // the Beans jmsConnectionFactory and jmsListenerContainerFactoryConfigurer (mapped to configurer arg of the same type) are created and auto-wired by Spring Boot auto-configuration public JmsListenerContainerFactory<?> myFactory(ConnectionFactory jmsConnectionFactory, DefaultJmsListenerContainerFactoryConfigurer configurer) { DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory(); // This provides all auto-configured defaults to this factory configurer.configure(factory, jmsConnectionFactory); return factory; } } 还有一个接收器'AsyncReceiver.java': package aero.champ.broker.connectorTest; import org.springframework.jms.annotation.JmsListener; import org.springframework.stereotype.Component; import jakarta.jms.JMSException; import jakarta.jms.Message; @Component public class AsyncReceiver { @JmsListener(destination = "TestQ1", containerFactory = "myFactory") public void receiveMessage(Message m) throws JMSException { System.out.println("Received <" + m.getBody(String.class) + ">"); } } 没有别的了! ...很神奇,但如果您没有正确的设置、依赖项或其他配置元素,则会很脆弱。

回答 2 投票 0

无法确定响应目的地:请求消息不包含回复目的地,

有人可以帮助我吗? 我在控制台中出现此错误:jakarta.jms.InvalidDestinationException:无法确定响应目的地:请求消息不包含回复目的地,a...

回答 1 投票 0

Spring Boot 3.1 JMS 应用程序 - IBM MQ v9.3 (Linux) 中的“CodedCharSetId”未设置为 5026

我尝试将 MQMD 标头中的“CodedCharSetId”属性设置为 5026,以便从 Spring Boot 3.1 JMS 应用程序发送到 IBM MQ 服务器(v9.3,Linux)的消息。 这是我所做的:

回答 1 投票 0

无限弹簧-jms测试

我试图为我的 springJmsListner 编写测试,但它没完没了。我认为它与上下文缓存有关,但我不确定。我正在使用测试容器 @Autowired 私人 Lateinit var jmsTem...

回答 1 投票 0

我的两个接收器中只有一个正在从 ActiveMQ Artemis 多播队列接收消息

我有两个使用 JmsListener 的 Spring Boot 应用程序,它们从名为 onboard_application 的 ActiveMQ Artemis 多播队列和名为 onboard_address 的地址消费,但只有一个应用程序能够接收...

回答 1 投票 0

无法在 IntelliJ 中使用 ActiveMQ 启动监听器 Java 应用程序

我有一个侦听队列的 Java MQ 侦听器应用程序。当我在本地使用它时,我使用ActiveMQ发送消息,我的问题是: 我尝试在

回答 1 投票 0

mq-jms-spring-boot-starter 的 JNDI 连接问题

我正在使用 mq-jms-spring-boot-starter com.ibm.mq mq-jms-spring-boot-starter ...

回答 1 投票 0

@IntegrationFlow DSL 中的角色

使用消息驱动通道适配器时,是否可以通过 IntegrationFlow dsl 指定用于领导选举的端点角色? 我可以使用...创建 JMS 消息驱动端点...

回答 1 投票 0

从 ActiveMQ Artemis 队列重新传递 JMS 消息

我目前正在实现一个消费者,它监听 ActiveMQ Artemis Broker 发送的事件。 我发现这篇文章说: 1 & 2 和 3 & 4 之间的主要区别是...

回答 2 投票 0

使用 Artemis 队列重新传递 JmsEvent

我目前正在实现一个消费者,它监听 Artemis Broker 发送的事件。 我发现这篇文章说 1 & 2 和 3 & 4 之间的主要区别是后者允许

回答 2 投票 0

根据记录类型使 JMSTemplate 中的队列名称动态化

我在 Spring Batch 应用程序中使用 JSMItemWriter。 是否可以在运行时动态设置队列名称或者动态定义一个jmsTemplate,而不是在代码中将其定义为bean

回答 1 投票 0

Azure 服务总线:Amqp 空闲超时条件 = amqp:link:detach-forced

我得到的错误: 2019-12-09 06:39:33.189 错误 107132 --- [http-nio-8082-exec-5] o.a.c.c.C.[.[.[/].[dispatcherServlet] : servlet [dispatcherServlet] 的 Servlet.service()带有路径 [] 的上下文...

回答 3 投票 0

附加到服务激活器的 Spring Retry Recovery 不是处理链的一部分

我正在使用服务激活器的 Spring 集成链来处理来自队列的传入消息。持久化传入消息的服务激活器 messagePersister 之一。如果这是...

回答 1 投票 0

在 Spring Boot 测试中使用嵌入式 ActiveMQ Artemis 服务器创建会话工厂失败

尝试在 Spring Boot 中访问测试嵌入式 ActiveMQ Artemis 服务器时,遇到 jakarta.jms.JMSException: Failed to create session factory 错误。这是我的设置: 雅加达.jms.

回答 1 投票 0

Spring Jmstemplate.send 从 JmsListener 方法内部

在我们的应用程序中,我们有以下快乐路径流程: Gateway-> jmstemplate.send msg(withreplyTo=Gateway-Node-Specific_queue) 到 BE GenericQueue 并通过监听器等待响应 (Gateway-Node-

回答 1 投票 0

无法发布我的消息,出现反序列化未经授权的类错误

我正在尝试使用 RabbitMq 创建消息队列。当我尝试将消息推送到队列时,出现以下错误消息 org.springframework.amqp.rabbit.support.ListenerExecutionFailedException:

回答 2 投票 0

jakarta.jms.JMSException:无法从内容构建正文。可序列化的类不可用于代理

我在 Spring Boot 应用程序中遇到一个问题,无法显示 ObjectMessage 正文。我收到的错误消息是: jakarta.jms.JMSException:无法从内容构建正文。

回答 1 投票 0

Spring JmsTemplate - 添加自定义属性

我使用Spring API的JmsTemplate和MappingJackson2MessageConverter(版本:spring-jms-4.3.4.RELEASE.jar)来发布消息 到 ActiveMQ 主题,如下面的代码所示。 主题公开...

回答 2 投票 0

使用jms将消息发布到servicebus时令牌已过期

我们目前使用的技术有: Springboot(3.1.2) Azure 服务总线(主题) 春季JMS 我们按照 Spring 中的 jms 访问了 Azure 服务总线文档。如果您需要了解

回答 1 投票 0

如何从队列中消费不同类型的对象?

我有一个具有两种不同类类型的队列,即 BusinessUser 和 NormalUser。我怎样才能将它们转换为各自的类型? @JmsListener(目的地=“目的地”) 公共空间

回答 1 投票 0

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.