gpt4 book ai didi

jakarta-ee - 如何控制或管理JMS队列?例如。更改队列中的消息顺序,删除消息等

转载 作者:行者123 更新时间:2023-12-02 04:08:50 25 4
gpt4 key购买 nike

我在Linux OS中将HornetQ与JBoss6结合使用,
有人可以告诉我如何控制JMS Queue删除消息或更改订单
消息的详细信息,与Queue连接的MessageConsumers的详细信息?

哪种方法最适合这种要求?
任何建议表示赞赏。

谢谢。

最佳答案

队列是一个简单的概念-多个源写入队列,并且单个使用者按接收顺序依次读取消息。尝试引入随机访问会混淆该概念,并且与排队的意图背道而驰。

如果您不能修改使用者以删除或排序消息,请引入一个中间队列和消息驱动Bean(MDB)进行工作:MDB将使用队列Q上的消息,丢弃某些消息并重新排序其他消息在将消息发布到队列Q'之前发送消息。

之前:

Q -> orignal consumer

后:
Q -> your filtering and sorting MDB -> Q' -> original consumer

这保留了设计中组件的意图,并且我认为更容易解释和理解。

编辑:您的MDB看起来类似于以下示例(基于Java Enterprise Edition 6 tutorial)。本教程还包含有关打包和部署MDB的信息。
// MDB to consume messages on the original queue
@MessageDriven(mappedName="jms/IncomingQueue", activationConfig = {
@ActivationConfigProperty(propertyName = "acknowledgeMode",
propertyValue = "Auto-acknowledge"),
@ActivationConfigProperty(propertyName = "destinationType",
propertyValue = "javax.jms.Queue")
})
public class MyMDB implements MessageListener {
@EJB
private MessageFilter messageFilter;

public void onMessage(Message message) {
// pass on to MessageFilter bean for processing
messageFilter.filter(message);
}
}

// singleton bean to filter and sort messages, then re-publish to the original consumer
// if singleton doesn't work in your environment then you might have to persist the
// messages using e.g. JPA
@Singleton
public class MessageFilter {
@Resource(name="jms/OutgoingQueue")
Queue outgoingQueue;

@Resource(name="jms/QueueConnectionFactory")
QueueConnectionFactory qcf;

// accept incoming message from the MDB
void filter(Message message) {
// filter and sort messages
...

// send to queue read by the original consumer
send(message);
}

// send message to the filtered & sorted queue for the original consumer
void send(Message message) {
QueueConnection queueConnection = qcf.createQueueConnection();
QueueSession queueSession = queueConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
QueueSender queueSender = queueSession(outgoingQueue);

queueSender.send(message);
}
}

Java EE 6教程还提供了有关 how to create singleton beans的示例,这是 tutorial for connecting to a queue in order to send a message

关于jakarta-ee - 如何控制或管理JMS队列?例如。更改队列中的消息顺序,删除消息等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6261891/

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