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