在我的 Spring 项目中,我确实有一个由 spring 管理的 JMS 消息侦听器:
<bean id="jmsFactory" class="org.apache.activemq.ActiveMQConnectionFactory" p:brokerURL="tcp://localhost:61616"/>
<bean id="simpleExampleListener" class="my.package.ExampleListener" />
<jms:listener-container container-type="default" connection-factory="jmsFactory" acknowledge="auto" concurrency="1-3">
<jms:listener destination="TEST.FOO" ref="simpleExampleListener" method="onMessage"/>
</jms:listener-container>
在一个特定的消息上,我需要调用一个 Spring MVC 控制器,它是请求范围的(实际上目标是调用一个服务,它也是请求范围的并被控制器调用)。因此,我不能直接从侦听器中执行此操作,因为 Spring 根据需要管理它们并且它们不受请求范围限制(因为我无法通过@Autowire
or访问控制器ApplicationContext
)。一种解决方案可能是通过我的控制器映射的带有 Rest Template 到 URL 的 HTTP 调用。但是,我认为这是一种开销,所以也许还有其他方法可以避免 HTTP 协议开销并在 Spring MVC 框架中调用 Controller?