当前位置: 首页 > 知识库问答 >
问题:

消息驱动Bean读取两次相同的消息

周子平
2023-03-14

早上好在我的时区。

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

事先表示感谢并致以最良好的问候

共有1个答案

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

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

使用消息侦听器来验证消息接收的确切时间以及消息发布的生存时间

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

}
 类似资料:
  • 是否可以在MDB(消息驱动Bean)中为“目的地”动态分配运行时值? 我还尝试了ejb-jar.xml方法,但是“activation-config-property-name”=“destination”的值被理解为队列的文字物理名称。因此我无法对资源进行JNDI查找。 从属性读取和分配目标或使用-d参数传递值的正确方法是什么?

  • 在企业应用程序中,我试图使用netBeans 8.1将MessageDriven beans注入Web应用程序(到REST服务)。我在IDE中没有得到任何警告,但是,在部署时,我得到以下错误: 严重:加载应用程序时出现异常:CDI部署失败:Weld-001408:未满足类型StatisticsBean的依赖关系,其限定符@Default在注入点[BackedAnnotatedField]@Inje

  • 消息驱动Bean是一种企业bean,当EJB容器从队列或主题接收消息时由EJB容器调用。 消息驱动的bean是一个无状态bean,用于异步执行任务。 为了演示消息驱动bean的使用,我们将使用EJB-persistence章节,我们需要执行以下任务 - Step 1 - 在数据库中创建表(请参阅EJB-Persistence章节)。 Step 2 - 创建与表对应的实体类(请参阅EJB-Persi

  • 我希望能够在生产环境中对已部署的消息驱动Bean进行健康检查。我最初的想法是添加一个方法,确保JMS队列(用于读取)和数据库(用于写入)都可用,然后将此health方法作为REST API公开。不幸的是,由于MDB不像其他类型的EJB那样是可注入的,我无法从我的REST控制器获取对它的引用。。。 有没有办法通过REST API公开消息驱动bean的方法?或者有没有其他方法来实现我最初的目标? 编辑

  • 同事, 你能帮我解决以下问题吗? 我有JavaEE应用程序。它包含一些具有业务逻辑的消息驱动Bean和一些负责整个应用程序配置的不同方面的管理Bean。我想设置bean启动和初始化的顺序。这意味着在管理Bean完成应用程序的初始化之前,容器不应该调用消息驱动Bean。应用程序的初始化包括读取和解析一些配置文件,这需要一些时间。 有WebSphere配置选项吗? 或者它应该只以编程方式完成技巧?

  • 在一个无状态bean中,我正在查找队列,这是正确的,并且发送没有抛出异常: 但不调用消息驱动bean的onMessage方法。 我错过了什么? 我的消息驱动bean有以下代码: