【发布时间】:2015-03-26 09:58:26
【问题描述】:
一个简单的消息发布者如下所示:
@Service("myPublisher")
public class MyPublisher{
@Publisher(channel = "myChannel")
public Message<?> sendMessage (Message<?> message) {
return message;
}
}
...并且是这样配置的:
<int:channel id="myChannel"/>
<int-jms:outbound-channel-adapter channel="myChannel" destination="defaultDestination" session-transacted="true"/>
<bean class="org.springframework.integration.aop.PublisherAnnotationBeanPostProcessor"/>
问题是,这个发布者将消息发送到准备好的defaultDestination,但我需要将消息发送到不同的队列。就我而言,我的应用程序中的每个任务都需要一个消息队列。原因是,如果我想中止任务,我必须从代理中删除消息。如果一项任务有数千条消息,则使用选择器接收所有消息不是一个好习惯。我需要在不接收客户端的情况下从消息代理中删除所有已中止任务的消息。 JMS 只支持消息的发送和接收。我必须使用代理 API (QPID) 来删除消息。问题是,QPID 不支持通过选择器移除消息,但它支持移除队列。
我想,我需要一个 PublisherFactory,它的功能如下:
public class PublisherFactory {
public MyPublisher getPublisher(String destinationName){...};
}
factory.getPublisher("testQueue");
这个方法应该返回一个向testQueue发送消息的发布者。
或者具有这样功能的服务:
public class PublisherService {
public Message<?> sendMessage(Message<?> message, String desinationName){...};
}
service.sendMessage(new Message("test"), "testQueue");
简而言之,我想要的只是将Message 发送到特定目的地的服务。目标名称应设置为方法调用的参数或工厂的类变量。
我希望有人能解决我的问题。谢谢:)
【问题讨论】:
标签: spring jms spring-integration messaging spring-jms