我们正在评估WSO2堆栈,特别是Message Broker v 2.2.0,并且无法使消息重试限制正常工作。
根据此文档页面,一旦客户端拒绝了10次消息,它将从队列中删除并放置在死信队列中。
https://docs.wso2.com/display/MB220/Maximum+Delivery+Attempts
拒绝的定义是:
a)在使用Session.CLIENT_ACKNOWLEDGE或
的情况下不发送确认
b)在使用交易会话的情况下回滚交易。
使用WSO2示例客户端代码,我们无法使用客户端确认模式或诱导故障的任意组合来观察此行为。消息在队列中保持活动状态,可以多次从该队列中获取。确认它或提交会话会将其从队列中删除。
任何人都可以确认此功能是否真的有效,如果有,请告诉我们客户端必须做些什么来触发它。我们一直在测试使用WSO2提供的示例客户端代码和未经修改的开箱即用服务器配置:
https://docs.wso2.com/display/MB220/Sending+and+Receiving+Messages+Using+Queues
任何帮助都会受到赞赏,因为我们无法继续使用WSO2而不了解系统的这一方面是如何工作的。
答案 0 :(得分:0)
此功能正常运行。为了测试您需要在示例代码中对提供的接收器客户端进行一些修改。
通过这些更改,您可以满足您的要求。
这里我将在QueueReceiver类中发布修改后的方法
public void receiveMessages() throws NamingException, JMSException {
Properties properties = new Properties();
System.setProperty("AndesAckWaitTimeOut", "30000");
properties.put(Context.INITIAL_CONTEXT_FACTORY, QPID_ICF);
properties.put(CF_NAME_PREFIX + CF_NAME, getTCPConnectionURL(userName, password));
System.out.println("getTCPConnectionURL(userName,password) = " + getTCPConnectionURL(userName, password));
InitialContext ctx = new InitialContext(properties);
// Lookup connection factory
QueueConnectionFactory connFactory = (QueueConnectionFactory) ctx.lookup(CF_NAME);
QueueConnection queueConnection = connFactory.createQueueConnection();
queueConnection.start();
QueueSession queueSession =
queueConnection.createQueueSession(false, QueueSession.CLIENT_ACKNOWLEDGE);
//Receive message
Queue queue = queueSession.createQueue(queueName);
MessageConsumer queueReceiver = queueSession.createConsumer(queue);
int count =0;
while (count < 12) {
TextMessage message = (TextMessage) queueReceiver.receive();
System.out.println("Got message ==>" + message.getText());
count++;
}
queueReceiver.close();
queueSession.close();
queueConnection.stop();
queueConnection.close();
}
请注意,此修改只是为了证明该功能正在运行。