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,在页面内点击“立即开通”
MNS支持JMS协议的方案

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

3. 查看所选区域的Endpoint
MNS支持JMS协议的方案

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

5. 在代码里引入JMSjar包,有两种方式:
       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
上一篇:csproj文件设置输出到目录


下一篇:最佳实践:如何对MNS消息进行加密传输