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

JMS消息生成器不会将消息发送到队列

庄文栋
2023-03-14

我设置了一个EJB项目,使用JMS将持久性实体对象发送到MDB。我使用JBoss EAP 7,使用Apache ActiveMQ作为消息传递提供程序。我像这样设置ConnectionFactory和队列:

这是我的消息生成器,它接收“Account”实体对象作为参数并将其发送到队列:

EntityEnqueueBean。Java语言

@Stateless
@LocalBean
public class EntityEnqueueBean {

  Context context = null;

  public void enqueueEntity(Account accountEntity) {    
      try {
          context = new InitialContext();
          ConnectionFactory connectionFactory = (ConnectionFactory) context.lookup("java:/ConnectionFactory");
          Destination queue = (Destination) context.lookup("java:/jms/queue/AccountAccessQueue");
          Connection connection = connectionFactory.createConnection();
          Session session = connection.createSession(true, Session.SESSION_TRANSACTED);
          MessageProducer messageProducer = session.createProducer(queue);
          ObjectMessage objectMessage = session.createObjectMessage(accountEntity);
          messageProducer.send(objectMessage);

          messageProducer.close();
          session.close();
          connection.close();
      } catch (JMSException | NamingException e) {
          e.printStackTrace();
        }
   }
}

MDB从队列接收消息并对其进行处理:

java账户

@MessageDriven(
    activationConfig = { @ActivationConfigProperty(
            propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
            @ActivationConfigProperty( propertyName = "destination", 
            propertyValue ="java:/jms/queue/AccountAccessQueue")
    })
public class AccountPersitenceMDB implements MessageListener {

  public void onMessage(Message message) {
      ObjectMessage objectMessage = null;
      objectMessage = (ObjectMessage) message;
      try {
          Account accountEntity = (Account) objectMessage.getObject();
          System.out.println("MDB accessCount: " + accountEntity.getAccessCount());
      } catch (JMSException e) {
          e.printStackTrace();
      }
  }
}

不确定我做错了什么。我可能把设置ConnectionFactory和队列的代码弄错了,但我不确定,因为我是JavaEE的新手。感谢任何帮助。

共有1个答案

越英范
2023-03-14

多亏了@mendieta,我解决了这个问题。我阅读了JMS会话,它非常有意义。在EntityEnqueueBean中更改此行。java做到了这一点:

Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
 类似资料:
  • 我是Spring JMS的新手。我的应用程序是使用Spring Boot开发的,并部署在JBoss EAP7.2.0中。我有一个远程队列,它是一个活动的MQ Artemis队列,也嵌入在JBoss EAP7.2.0中。有人能建议我如何使用Spring Boot的JmsTemplate向远程JMS队列发送消息吗?基本上,我不知道应该如何定义远程connectionFactory来连接到远程队列。

  • 简单的消息发布器如下所示: ...其配置如下: 问题是,此发布服务器将消息发送到准备好的默认目标,但我需要将消息发送到不同的队列。在我的情况下,我的应用程序中的每个任务都需要一个消息队列。原因是,如果要中止任务,必须从代理中删除消息。如果一个任务有数千条消息,那么使用选择器接收所有消息不是一个好的做法。我需要从消息代理中删除中止任务的所有消息,而不接收客户端。JMS仅支持消息的发送和接收。我必须使

  • 我想使用SpringBoot向ActiveMQ队列发送消息。应用程序应在发送后终止,但仍保持活动状态。 这是我的申请代码: 在没有任何父节点的情况下使用以下依赖项(Maven): 和一行

  • 在Spring集成中使用出站网关时,我试图在JMS标头中发送回复Q详细信息。我了解到JIRA#INT-97中的增强功能在将Spring消息标头发送到JMS目标之前将其复制到JMS标头。 在将消息发送到出站网关之前,将消息头设置如下。message.getHeader(). setAtcm(JmsTargetAdapter.JMS_REPLY_TO, myReplyDestation); 但是我无法

  • 我有一个web应用程序,它通过WebLogic中的JMS与其他Java web应用程序通信。 我读到这样的答案:如何从PHP连接Jms? 我安装了ActiveMQ并尝试使用它。但是在Weblogic中,我们需要“jms_factory”和“queue_name”。我想它使用t3协议。

  • 问题内容: 我试图将字符串消息发送到在weblogic服务器中创建的JMS队列中。我使用Eclipse IDE,当我运行Web应用程序时,出现以下错误,tomcat服务器关闭。错误是 请帮助我。谢谢和最诚挚的问候 问题答案: 基于对该问题的一些快速研究,它似乎是由于在应用服务器和客户端之间使用不同的JDK级别引起的。我看到的大多数示例都表明,在Java 5上运行Weblogic时在客户端上使用Ja