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

Apache Qpid JMS客户端消息生成器卡住,无法传递到队列

邢昂然
2023-03-14

我试图通过AMQP 1.0协议向Qpid代理发送消息。队列名为queue2,它已经在默认的虚拟主机下创建。但是,producer.send(消息)永远卡住了。相同的代码适用于连接到Azure服务总线。我使用的是qpid-jms-Client 0.58。生产者代码是:

Hashtable<String, String> hashtable = new Hashtable<>();
hashtable.put("connectionfactory.myFactoryLookup", protocol + "://" + url + "?amqp.idleTimeout=120000&amqp.traceFrames=true");
hashtable.put("queue.myQueueLookup", queueName);
hashtable.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.qpid.jms.jndi.JmsInitialContextFactory");

Context context = new InitialContext(hashtable);

ConnectionFactory factory = (ConnectionFactory) context.lookup("myFactoryLookup");
queue = (Destination) context.lookup("myQueueLookup");

Connection connection = factory.createConnection(username, password);
connection.setExceptionListener(new AmqpConnectionFactory.MyExceptionListener());

connection.start();

Session session=connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

// session.createQueue("queue3");
Queue queue = new JmsQueue("queue2");
MessageProducer messageProducer = session.createProducer(queue);
TextMessage textMessage = session.createTextMessage("new message");
messageProducer.send(textMessage) 

生产时应用程序的线程转储

java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on <0x000000078327c550> (a org.apache.qpid.jms.provider.ProgressiveProviderFuture)
    at java.lang.Object.wait(Object.java:502)
    at org.apache.qpid.jms.provider.ProgressiveProviderFuture.sync(ProgressiveProviderFuture.java:154)
    - locked <0x000000078327c550> (a org.apache.qpid.jms.provider.ProgressiveProviderFuture)
    at org.apache.qpid.jms.JmsConnection.send(JmsConnection.java:773)
    at org.apache.qpid.jms.JmsNoTxTransactionContext.send(JmsNoTxTransactionContext.java:37)
    at org.apache.qpid.jms.JmsSession.send(JmsSession.java:964)
    at org.apache.qpid.jms.JmsSession.send(JmsSession.java:843)
    at org.apache.qpid.jms.JmsMessageProducer.sendMessage(JmsMessageProducer.java:252)
    at org.apache.qpid.jms.JmsMessageProducer.send(JmsMessageProducer.java:182)

我尝试运行这个示例,得到了相同的结果。

共有2个答案

史阳晖
2023-03-14

好了,终于有问题了。文件系统已满90%以上,强制执行流控制。所以从我的机器上删除了文件,它开始工作了。https://qpid.apache.org/releases/qpid-broker-j-7.0.7/book/Java-Broker-Runtime-Disk-Space-Management.html

艾学海
2023-03-14

通常,如果客户端不发送,是因为远程服务器没有授予它这样做的权限。您可以使用协议跟踪功能调试客户端状态(只需设置PN\u trace\u FRM=true并运行客户端)。

可能您以某种方式错误配置了Broker-J,并且您创建的目的地不允许发送任何消息,或者您发送的消息太多,超出了写入限制。您应该参考配置指南并查看您已经设置的内容。

 类似资料:
  • 我们正试图从ActiveMQ5.x升级到最新的Artemis(2.17),但我们的一个应用程序让我们很难过。 我们单独运行了一个事务,启用了Artemis STOMP调试,下面是我们看到的: 问题的核心似乎是来自上面显示的“send”操作的消息从未到达接收者。我们已经验证了接收者是在线的,并且它响应使用JMS和Openwire连接的其他客户端--但是这个STOMP消息没有被路由到目的地。 如果关闭

  • 我正在试用netty,但当我响应时,客户端似乎没有收到我的消息。我使用Java NIO和socketChannel编写了相同的代码,看起来很好。我这样说是因为客户机会记录我发送的任何内容。下面是我的服务器 下面是我的服务器处理程序 } 示例响应: 我正在我的盒子上做一个tcpdump,我看到了我在电线上发送的内容,所以我不确定我做错了什么。而且,几分钟后,这会被记录下来,我不确定我在服务器或服务器

  • 我设置了一个EJB项目,使用JMS将持久性实体对象发送到MDB。我使用JBoss EAP 7,使用Apache ActiveMQ作为消息传递提供程序。我像这样设置ConnectionFactory和队列: 这是我的消息生成器,它接收“Account”实体对象作为参数并将其发送到队列: EntityEnqueueBean。Java语言 MDB从队列接收消息并对其进行处理: java账户 不确定我做错

  • 我在远程机器上设置了Kafka和动物园管理员。在那台机器上,我可以看到下面使用官方网站上的测试方法工作。 但是当我使用本地消费者脚本时,它就不起作用了: 我试着把它改成: 然后运行客户端使用者脚本,它会给出错误: [2017-08-11 15:49:01,591]获取相关id为3的元数据时警告错误:{listings-incoming=leader_not_available}(org.apach

  • 我是一个使用python进行套接字编程的初学者。我正在做我的课程项目。我的项目的一部分需要用不同的端口发送和接收UDP消息。提供了名为robot的服务器程序,我需要编写名为student的客户端程序,它可以与机器人进行交互。因此,我不能显示服务器程序中的所有源代码。 这是服务器程序中与UDP套接字相关的部分 这是我的客户端程序。s3 是 UDP 套接字。我可以成功地向服务器程序发送消息,但无法从中