Java消息服务(JMS)
#java #pubsub #jms

Java消息服务(JMS)是一个消息API,它为Java应用程序发送和接收消息提供了标准方式。 JMS是一个松散的耦合消息系统,这意味着消息的发件人和接收器无需同时运行。 JMS也是一个可靠的消息传递系统,这意味着消息不会丢失或损坏。

JMS用于多种应用中,包括:

•企业应用程序集成(EAI)
•企业对企业(B2B)集成
•Web服务
•云计算

JMS提供了两个消息域:

点对点消息传递
•publish-subscriber消息传递

在点对点消息中,消息的发送者和接收器之间存在一对一的关系。在Publish-Subscribe消息传递中,发送者和接收器之间有一对多的关系。

JMS提供了许多使其成为强大消息API的功能,包括:

消息持久性
•消息确认
•消息传递保证
•消息过滤
•消息到期
•消息转换

JMS是一种成熟且广泛使用的消息API。它得到了各种消息供应商的支持,包括IBM,Oracle和Red Hat。

这是使用JMS的一些好处:

•松散耦合消息传递:消息的发件人和接收器不需要同时运行。
•可靠的消息传递:消息不会丢失或损坏。
•标准化API:JMS是标准API,这意味着Java应用程序可以与任何JMS提供商通信。
•供应商中立:JMS是供应商中立的API,这意味着Java应用程序可以与任何JMS提供商通信而无需锁定特定的供应商。
•成熟且广泛使用:JMS是一个成熟且广泛使用的消息API,这意味着有大量的知识和专业知识。

Java程序通过Java JMS发送消息:

import javax.jms.*;
import javax.naming.*;

public class JmsMessageSender {
    public static void main(String[] args) throws NamingException, JMSException {
        // Set up the JNDI context to access the JMS provider
        Context context = new InitialContext();
        ConnectionFactory connectionFactory = (ConnectionFactory) context.lookup("ConnectionFactory");
        Destination destination = (Destination) context.lookup("queue/MyQueue");

        // Create a JMS connection and session
        Connection connection = connectionFactory.createConnection();
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

        // Create a JMS message producer
        MessageProducer producer = session.createProducer(destination);

        // Create a text message and send it
        TextMessage message = session.createTextMessage("Hello, world!");
        producer.send(message);

        // Clean up resources
        producer.close();
        session.close();
        connection.close();
    }
}

Java程序,该程序接收来自JMS队列的消息:

import javax.jms.*;
import javax.naming.*;

public class JmsMessageReceiver {
    public static void main(String[] args) throws NamingException, JMSException {
        // Set up the JNDI context to access the JMS provider
        Context context = new InitialContext();
        ConnectionFactory connectionFactory = (ConnectionFactory) context.lookup("ConnectionFactory");
        Destination destination = (Destination) context.lookup("queue/MyQueue");

        // Create a JMS connection and session
        Connection connection = connectionFactory.createConnection();
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

        // Create a JMS message consumer
        MessageConsumer consumer = session.createConsumer(destination);

        // Start the connection
        connection.start();

        // Receive messages until there are no more
        while (true) {
            Message message = consumer.receive();
            if (message instanceof TextMessage) {
                TextMessage textMessage = (TextMessage) message;
                System.out.println("Received message: " + textMessage.getText());
            } else {
                System.out.println("Received message of unsupported type: " + message.getClass().getName());
            }
        }
    }
}