MNS支持JMS协议的方案

本文涉及的产品
对象存储 OSS,20GB 3个月
云备份 Cloud Backup,100GB 3个月
阿里云盘企业版 CDE,企业版用户数5人 500GB空间
简介: JMS即Java Message Service,一般是用于两个应用程序之间,或分布式系统中发送消息,进行异步通信。有大量的消息服务中间件都实现了JMS协议,今天我们要介绍消息服务是阿里云提供的MNS消息服务,MNS消息服务现在也已经有了支持了JMS协议的方案。
JMS即Java Message Service,一般是用于两个应用程序之间,或分布式 系统 中发送消息,进行异步通信。有大量的消息 服务 中间件都实现了JMS协议,今天我们要介绍消息服务是 阿里 提供的MNS消息服务,MNS消息服务现在也已经有了支持了JMS协议的方案。

MNS提供的java-messaging-lib已经支持JMS1.1规范,已经在使用JMS中间件的应用程序可以无缝迁移至MNS。

具体配置过程:
1. 开通 MNS 服务: www.aliyun.com/product/mns ,在页面内点击“立即开通”


2. 进入管理控制台: mns.console.aliyun.com ,可以在控制台里选择一个离你最近的区域
    如果你还 购买 了对应区域的 ECS 虚拟机,那么可以直接调用对应区域的私网地址,所有流量全部走内网流量(内网流量全 免费 哦)


3. 查看所选区域的 Endpoint


4. 查看 AK 信息 ak-console.aliyun.com/#/accesskey , 页面内可以创建和查看你的AK信息

5. 在代码里引入 JMS jar 包,有两种方式:
       5.1 在pom文件里依赖对应的Maven库  
        <dependency>
            <groupId>com.aliyun.mns</groupId>
            <artifactId>java-messaging-lib</artifactId>
            <version>0.1.1</version>
        </dependency>
       5.2 从maven直接下载jar包: 
               https://repo1.maven.org/maven2/com/aliyun/mns/java-messaging-lib/0.1.1/

6. 接下来就可以在代码中直接使用 MNS 啦,
     对于已经在使用 JMS 的用户来说,只需要修改以下两处代码
    6.1 创建JMS连接:  这里需要修改为使用 MNSConnectionFactory ,创建出使用MNS服务的Connection 
          String accessKeyId = “从第4步拿到的AK信息”;
          String accessKeySecret = “从第4步拿到的AK信息”;
          String accessKeySecret = “从第4步拿到的AK信息”;
          String endpoint = “从第3步拿到的Endpoint信息”;
          MNSConnectionFactory factory = MNSConnectionFactory.builder()
                                                                .withAccessKeyId(accessKeyId)
                                                                .withAccessKeySecret(accessKeySecret)
                                                                .withEndpoint(endpoint)
                                                                .build();
          MNSQueueConnection connection = factory.createQueueConnection();

    6.2  创建队列,使用JMS的时候,我们会需要创建一个Session,并且连接到对应的队列
            这里可以选择创建一个MNS队列,会调用MNS消息服务的接口,在MNS消息服务的Server上建立一个队列,用来存储消息。
             如果已经通过其他途径创建了 MNS 队列,那么创建队列这一步可以忽略
          MNSClientWrapper mnsClientWrapper = connection.getMNSClientWrapper();
          mnsClientWrapper.createQueue(queueName);
        然后创建JMS的Session,需要注意,目前MNS仅支持AUTO_ACKNOWLEDGE模式的Session
          QueueSession session = connection.createQueueSession(false, 
              Session.AUTO_ACKNOWLEDGE);
          Queue queue = session.createQueue(queueName);
      
     对于第一次使用 JMS的用户来说,还需要添加以下代码
    6.3 设置Producer发送消息
         MessageProducer producer = session.createProducer(queue);
         TextMessage textMessage = session.createTextMessage("Hello JMS!");                   
         textMessage.setDoubleProperty("TestFloat", 0.127);
         producer.send(textMessage);

    6.4 设置Consumer监听消息
     首先是设置一个MessageListener
        MessageListener listener = new MessageListener() {
            @Override
            public void onMessage(Message message) {
                    receivedNum.incrementAndGet();
                    try {
                        if (message instanceof TextMessage) {
                            MNSTextMessage textMessage = (MNSTextMessage) message;
                            System.out.println("Receive in lisener: " + textMessage.getText());
                        }
                    } catch (JMSException e) {
                        e.printStackTrace();
                    }                    
                }
            };
     然后创建Consumer
      MessageConsumer consumer = session.createConsumer(queue);
      consumer.setMessageListener(listener);     
      connection.start();

    6.5 关闭连接
    消息通信结束之后,可以选择关闭Connection
      producer.close();
      consumer.close();
      session.close();
      connection.close();

备注:   已经支持的 JMS 接口:
      支持的 JMS 1.1 常用接口:
  • ConnectionFactory
  • Connection
  • Destination
  • Session
  • MessageProducer
  • MessageConsumer


      支持的消息类型
  • TextMessage
  • ByteMessage
  • ObjectMessage


      支持的消息确认模式
  • AUTO_ACKNOWLEDGE


本帖中的代码建议在严格测试后再用于生产环境,以避免具体业务场景下可能产生的意想不到的 问题

有任何问题,都欢迎加入 MNS 的旺旺技术支持群  51222373  ,或者在 MNS 消息服务的论坛提问 bbs.aliyun.com/thread/240.html
相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
6月前
|
消息中间件 网络协议 JavaScript
MQTT常见问题之微消息队列mqtt支持ipv6失败如何解决
MQTT(Message Queuing Telemetry Transport)是一个轻量级的、基于发布/订阅模式的消息协议,广泛用于物联网(IoT)中设备间的通信。以下是MQTT使用过程中可能遇到的一些常见问题及其答案的汇总:
|
消息中间件 Java 数据库连接
JMS 消息队列接口基本使用指南
JMS 消息队列接口基本使用指南
564 0
|
4月前
|
消息中间件 Java 测试技术
消息队列 MQ使用问题之数据流出规则是否支持平台的云RabbitMQ
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
5月前
|
消息中间件 存储 开发工具
消息队列 MQ产品使用合集之C++如何使用Paho MQTT库进行连接、发布和订阅消息
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
2月前
|
消息中间件 监控 物联网
MQTT协议对接及RabbitMQ的使用记录
通过合理对接MQTT协议并利用RabbitMQ的强大功能,可以构建一个高效、可靠的消息通信系统。无论是物联网设备间的通信还是微服务架构下的服务间消息传递,MQTT和RabbitMQ的组合都提供了一个强有力的解决方案。在实际应用中,应根据具体需求和环境进行适当的配置和优化,以发挥出这两个技术的最大效能。
146 0
|
3月前
|
消息中间件 存储 监控
AMQP 与其他消息协议的对比分析
【8月更文第28天】高级消息队列协议 (AMQP) 是一种开放标准的应用层协议,主要用于消息中间件。本文将对比分析 AMQP 与其他流行的协议如 MQTT 和 RMQ(通常指的是 RabbitMQ),探讨它们的特点以及适合的应用场景。
41 0
|
4月前
|
消息中间件 API 开发工具
消息队列 MQ使用问题之如何开启RabbitMQ的MQTT功能
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
4月前
|
消息中间件 物联网 API
消息队列 MQ使用问题之如何在物联网项目中搭配使用 MQTT、AMQP 与 RabbitMQ
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
5月前
|
消息中间件 小程序 JavaScript
消息队列 MQ产品使用合集之如何限制部分客户端连接
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
6月前
|
消息中间件 数据采集 Serverless
云消息队列 RocketMQ 版-消息集成-概述
消息集成是助力企业数字化转型的全栈式消息与数据集成平台,简化流程,支持云上云下、跨区域集成。它提供低代码的事件流服务,具备数据源集成、数据清洗、Serverless自定义处理等功能,支持丰富的数据源和跨端连接。然而,使用时存在如单个任务数据限制、任务名称长度等约束。消息流入(Source)负责从各种数据源获取数据,消息流出(Sink)将数据分发到目标,数据处理(Transform)允许数据转换和分析,而任务(Task)则结合这些组件执行实际的集成操作。
245 3