1 JMS 规范
Java官方提供的一种要求各OMO厂商遵守的一个规范(API),以便开发者能够用一套API使用所有厂商的MQ。
1.1 JMS相关概念
提供者:实现JMS规范的消息中间件服务器。
客户端:发送或者接受消息的应用程序。
生产者/发布者:创建并发送消息客户端。
消费者/订阅者:接收并处理消息的客户端。
消息:应用程序之间传递数据内容。
消息模式:在客户端之间传递消息的方式,JMS中定义了主题和队列两种模式。
1.2 JMS消息模式
- 1 队列模型
客户端包括生产者和消费者
队列中的消息只能被一个消费者消费。
消费者可以随时消费队列中的消息。
队列模型中,消费者的每个连接会依次接收JMS队列中的消息,每个连接接收到的是不同的消息。
- 2 主题模式
客户端包括发布者和订阅者
主题中的消息被所有订阅者消费
消费者不能消费订阅之前就发送到主题中的消息,每个消费者收到的是全部的消息。
1.3 JMS模型
- 1.3.1 编码接口:
ConnectionFactory:用于创建连接到消息中间件的连接工厂.
Connection:代表了应用程序和消息服务之间的通讯链路.
Destination:目的地,指消息发布和接收的地点,包括队列和主题.
Session:表示一个单线程的上下文,用于发送和接收消息.
MessageConsumer:由会话创建,用于接收发送到目标的主题和消息.
MessageProducer:由会话创建,用于发送消息到目标.
Message:是消息体,是在生产者和消费者之间传递的对象,由消息头(必须存在),消息属性,消息体组成.
- 1.3.2 编程模型:
2 案例
Queue
MySender
import java.io.BufferedReader;
import java.io.InputStreamReader;
import javax.naming.*;
import javax.jms.*;
public class MySender {
public static void main(String[] args) {
try
{
//Create and start connection
InitialContext ctx=new InitialContext();
QueueConnectionFactory f=(QueueConnectionFactory)ctx.lookup("myQueueConnectionFactory");
QueueConnection con=f.createQueueConnection();
con.start();
//2) create queue session
QueueSession ses=con.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
//3) get the Queue object
Queue t=(Queue)ctx.lookup("myQueue");
//4)create QueueSender object
QueueSender sender=ses.createSender(t);
//5) create TextMessage object
TextMessage msg=ses.createTextMessage();
//6) write message
BufferedReader b=new BufferedReader(new InputStreamReader(System.in));
while(true)
{
System.out.println("Enter Msg, end to terminate:");
String s=b.readLine();
if (s.equals("end"))
break;
msg.setText(s);
//7) send message
sender.send(msg);
System.out.println("Message successfully sent.");