JMS规范

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.")
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值