我的时区早上好。
Application Server - >是7 EJB 3.0
在我正在进行的项目中,我们使用Message-Driven bean来读取队列中的消息。此消息驱动的bean读取相同消息的两倍,在第二次读取时,它会抛出异常,因为数据库插入中存在完整性约束。 为什么这个Message-driven bean读取消息两次。 我们在队列中只使用一个侦听器,并且只有一个MDB连接到该侦听器。 我们通过注释使用以下ActivationConfigProperty 1个messageSelector 2 destinationType 3目的地
代码段
@MessageDriven(activationConfig = {
@ActivationConfigProperty(propertyName = "messageSelector", propertyValue = "ResponseType = 'XXXXX'"),
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "destination", propertyValue = "jms/YYYY")})
提前致谢 最好的问候
答案 0 :(得分:0)
@MessageDriven(activationConfig = {
@ActivationConfigProperty(propertyName = "destinationLookup", propertyValue = "java:/jms/queue/data"),
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge") })
使用此配置指定邮件的确认,我还认为我们需要指定 destinationLookup 或目标属性来指定严格的点对点通信。
使用消息监听器验证接收消息的确切时间以及发布消息的生存时间
@Stateless
public class MessageSender {
@Inject
JMSContext jmsContext;
public void sendMessage(String message, Destination destination) {
JMSProducer messageProducer = jmsContext.createProducer().setAsync(
new CompletionListener() {
public void onException(Message message, Exception exception) {
System.out
.println("Message not delivered!!!!\nAn exception has occured "
+ exception);
}
public void onCompletion(Message message) {
System.out
.println("Message delivered : hooah ");
}
});
// To check if both the messages are getting expired after the mentioned time
messageProducer.setTimeToLive(6000);
messageProducer.send(destination, message);
}
}