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库
https://repo1.maven.org/maven2/com/aliyun/mns/java-messaging-lib/0.1.1/
6. 接下来就可以在代码中直接使用 MNS 啦,
对于已经在使用 JMS 的用户来说,只需要修改以下两处代码
6.1 创建JMS连接: 这里需要修改为使用 MNSConnectionFactory ,创建出使用MNS服务的Connection
6.2 创建队列,使用JMS的时候,我们会需要创建一个Session,并且连接到对应的队列
这里可以选择创建一个MNS队列,会调用MNS消息服务的接口,在MNS消息服务的Server上建立一个队列,用来存储消息。
如果已经通过其他途径创建了 MNS 队列,那么创建队列这一步可以忽略 。
对于第一次使用 JMS的用户来说,还需要添加以下代码
6.3 设置Producer发送消息
6.4 设置Consumer监听消息
首先是设置一个MessageListener
6.5 关闭连接
消息通信结束之后,可以选择关闭Connection
备注: 已经支持的 JMS 接口:
支持的 JMS 1.1 常用接口:
支持的消息类型
支持的消息确认模式
本帖中的代码建议在严格测试后再用于生产环境,以避免具体业务场景下可能产生的意想不到的 问题 。
有任何问题,都欢迎加入 MNS 的旺旺技术支持群 51222373 ,或者在 MNS 消息服务的论坛提问 bbs.aliyun.com/thread/240.html
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