簡體   English   中英

如何從 Solace JMS 隊列接收 JSON 消息,隊列已創建

[英]How to receive JSON message from a Solace JMS queue, the queue is already created

我正在嘗試從 Solace JMS 隊列接收 JSON 消息,但我沒有收到任何消息。 下面是我的代碼

@Service
public class QueueConsumer {

    final String QUEUE_NAME = "test.Request.Q.V01";

    // Latch used for synchronizing between threads
    final CountDownLatch latch = new CountDownLatch(1);

    public void run(String... args) throws Exception {

        String host = "test.solace.com";
        String vpnName = "TEST_VPN";
        String username = "testVpn";
        String password = "test123";

        System.out.printf("QueueConsumer is connecting to Solace messaging at %s...%n", host);

        SolConnectionFactory connectionFactory = SolJmsUtility.createConnectionFactory();
        connectionFactory.setHost(host);
        connectionFactory.setVPN(vpnName);
        connectionFactory.setUsername(username);
        connectionFactory.setPassword(password);

        connectionFactory.setDynamicDurables(true);

        Connection connection = connectionFactory.createConnection();

        Session session = connection.createSession(false, SupportedProperty.SOL_CLIENT_ACKNOWLEDGE);

        System.out.printf("Connected to the Solace Message VPN '%s' with client username '%s'.%n", vpnName, username);

        Queue queue = session.createQueue(QUEUE_NAME);

        MessageConsumer messageConsumer = session.createConsumer(queue);

        messageConsumer.setMessageListener(new MessageListener() {
            @Override
            public void onMessage(Message message) {
                try {
                    if (message instanceof SolaceMsg) {
                        System.out.printf("TextMessage received: '%s'%n", ((SolaceMsg) message).getClass());
                    } else {
                        System.out.println("Message received.");
                    }
                    System.out.printf("Message Content:%n%s%n", SolJmsUtility.dumpMessage(message));

                    message.acknowledge();

                    latch.countDown(); // unblock the main thread
                } catch (JMSException ex) {
                    System.out.println("Error processing incoming message.");
                    ex.printStackTrace();
                }
            }
        });

        System.out.println("Start receiving messages....");
        connection.start();
        System.out.println("Awaiting message...");
        latch.await();

        connection.stop();
        messageConsumer.close();
        session.close();
        connection.close();
    }

    public static void main(String... args) throws Exception {
        new QueueConsumer().run(args);
    }
}

我的消息類型是下面的 JSON 廣告,我為此創建了一個 POJO。

  {
    "customerDetails": {
        "customerID": "0001234",
        "customerName": "John"
    }
}

我收到一條警告說響應 - 400 隊列已經存在,因為它是一個現有隊列,我沒有收到任何消息。 我在這里做錯了什么?

您的代碼片段看起來正確。 您可以登錄到事件代理的 PubSub+ 管理器,以驗證客戶端是否綁定到正確的隊列以及消息是否已成功發布到隊列並正在等待使用。 您還可以啟用 Solace JMS API 日志記錄以了解有關應用程序正在做什么的更多信息: https://docs.solace.com/Solace-JMS-API/Code-and-Compile-Guideli.htm

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM