gpt4 book ai didi

java - 消息驱动 Bean 读取同一消息两次

转载 作者:太空宇宙 更新时间:2023-11-04 12:59:42 24 4
gpt4 key购买 nike

在我的时区早上好。

应用程序服务器 -> WAS 7EJB 3.0

在我正在从事的项目中,我们使用消息驱动 bean 从队列中读取消息。此消息驱动 bean 读取同一消息两次,并且在第二次读取时由于数据库插入中的完整性约束而引发异常。为什么这个消息驱动 bean 读取消息两次。我们仅在队列上使用一个监听器,并且只有一个 MDB 附加到该监听器。我们通过注释使用以下ActivationConfigProperty 1 个消息选择器 2 目的地类型 3个目的地

代码片段

@MessageDriven(activationConfig = {
@ActivationConfigProperty(propertyName = "messageSelector", propertyValue = "ResponseType = 'XXXXX'"),
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "destination", propertyValue = "jms/YYYY")})

提前致谢最好的问候

最佳答案

@MessageDriven(activationConfig = {
@ActivationConfigProperty(propertyName = "destinationLookup", propertyValue = "java:/jms/queue/data"),
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge") })

使用此配置来指定消息的确认,我还认为我们需要指定 destinationLookupdestination 属性来指定严格的点对点通信。

使用消息监听器来验证消息何时被接收以及消息发布的生存时间

@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);
}

}

关于java - 消息驱动 Bean 读取同一消息两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35034090/

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