06、阿里云微消息队列MQTT对接


一、打开链接:https://www.aliyun.com/product/mq4iot,根据提示开通微消息队列 MQTT,点击“管理控制台”会进入如下界面:

有关阿里云计费说明,请参考:https://help.aliyun.com/document_detail/52819.html?spm=a2c4g.11186623.6.554.28987cb

二、在管理控制台创建并记录以下信息,其中 devicename 是自己定义的,不需要在阿里云后台获取。

JavaScript 全选
{
	DeviceName: "B002TTSTESTDEVICE001",
	type: "4",
	instanceID: "mqtt-cn-n6w1ulyua01",
	AccessKeyID: "LTAI4GKyPad1FMQR1oWCjN8t",
	AccessKeySecret: "ucjNqveEbZxaMghdjybRgu6RQ29Or4",
	GroupID: "GID_BOX",
	topic: "data"
}

三、服务器对接,P2P 消息推送。请参考阿里云官方文档

https://help.aliyun.com/document_detail/96176.html?spm=a2c4g.11186623.2.13.229f42caHWXK5f#concept-96176-zh

注意:服务器下发消息,QOS 需要使用 0 或者 2,不能使用 1。

示例代码如下:

C# 全选
public void SendP2PMessage(String deviceId, String msg, String encrypt) throws Exception
{
	/**
	 * MQ4IOT clientId,由业务系统分配,需要保证每个 tcp 连接都不一样,保证全局唯一,如果不同的客户端对象(tcp 连接)使用了相同的 clientId 会导致连接异常断开。 clientId 由两部分组成,格式为 GroupID@@@DeviceId,其中 groupId 在 MQ4IOT 控制台申请,DeviceId 由业务方自己设置,clientId 总长度不得超过64个字符。   */
	String clientId = ""GID_PVP@@@ "" + deviceId;
	/*
	 * 发送端ClientID,请勿与TOPIC中ClientID重复,
	 *  String masterClientId = ""GID_PVP@@@bm_master"";
	 */
	String masterClientId = ""bm_master@@@ "" + System.currentTimeMillis();


	/**
	 * MQ4IOT 消息的一级 topic,需要在控制台申请才能使用。 如果使用了没有申请或者没有被授权的 topic 会导致鉴权失败,服务端会断开客户端连接。
	 */
	final String parentTopic = ""TID_VP "";


	/**
	 * QoS参数代表传输质量,可选0,1,2,根据实际需求合理设置,具体参考 https://help.aliyun.com/document_detail/42420.html?spm=a2c4g.11186623.6.544.1ea529cfAO5zV3
	 */
	final int qosLevel = 1;
	ConnectionOptionWrapper connectionOptionWrapper = new ConnectionOptionWrapper(instanceId, accessKey, secretKey, masterClientId);
	final MemoryPersistence memoryPersistence	= new MemoryPersistence();
	/** 客户端使用的协议和端口必须匹配,具体参考文档 https://help.aliyun.com/document_detail/44866.html?spm=a2c4g.11186623.6.552.25302386RcuYFB 如果是 SSL 加密则设置ssl://endpoint:8883 */
	MqttClient mqttClient = new MqttClient(""tcp: /* "" + endPoint + "":1883"", masterClientId, memoryPersistence); */
	/** * 客户端设置好发送超时时间,防止无限阻塞 */
	mqttClient.setTimeToWait(5000);
	mqttClient.setCallback( new MqttCallbackExtended()
		{
			public void connectComplete(boolean reconnect, String serverURI)
			{
				/** * 客户端连接成功后就需要尽快订阅需要的 topic */
				System.out.println(""connect success "");
			}
			public void connectionLost(Throwable throwable)
			{
				throwable.printStackTrace();
			}
			public void messageArrived(String s, MqttMessage mqttMessage) throws Exception {
				/*** 消费消息的回调接口,需要确保该接口不抛异常,该接口运行返回即代表消息消费成功。 消费消息需要保证在规定时间内完成,如果消费耗时超过服务端约定的超时时间,对于可靠传输的模式,服务端可能会重试推送,业务需要做好幂等去重处理。超时时间约定参考限制 https://help.aliyun.com/document_detail/63620.html?spm=a2c4g.11186623.6.546.229f1f6ago55Fj   */
				System.out.println(""receive msg from topic "" + s + "", body is "" + new String(mqttMessage.getPayload()));
			}
			public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken)
			{
				System.out.println(""send msg succeed topic is : "" + iMqttDeliveryToken.getTopics()[0] );
		}
	} );
	mqttClient.connect(connectionOptionWrapper.getMqttConnectOptions() );
						/** * MQ4IoT支持点对点消息,即如果发送方明确知道该消息只需要给特定的一个设备接收,且知道对端的 clientId,则可以直接发送点对点消息。 点对点消息不需要经过订阅关系匹配,可以简化订阅方的逻辑。点对点消息的 topic 格式规范是 {{parentTopic}}/p2p/{{targetClientId}} */
	final String p2pSendTopic = parentTopic + "" / p2p / "" + clientId;
	System.out.println(msg );
	MqttMessage message = new MqttMessage(msg.getBytes());
	if ( !"" "".equals(encrypt ) )
	{
		message = new MqttMessage(msg.getBytes(encrypt ) );
	}
	message.setQos(qosLevel);
	mqttClient.publish(p2pSendTopic, message);
}

 

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
管理员
评论列表

发表评论

评论内容
昵称:
关联文章

06阿里消息队列MQTT对接
05、阿里物联网MQTT对接
08、腾讯物联网MQTT对接
智能收款播报机 对接操作说明
07、百度物联网MQTT对接
04、自建 MQTT 对接
.NET中大型项目开发必备(12)--使用MQ消息队列
04.阿里物联网套件使用
阿里搭建FTP服务器访问报错 200,227错误
阿里免费SSL证书申请
消息发送时的问题
信,支付宝 支付对接文档
C# 邮件发送,阿里邮箱参数设置,邮件发送测试工具下载
.NET下如何拦截鼠标、键盘消息?Win32NET来帮你
09、TCP/IP服务器对接
一劳永逸,解决.NET发布服务器的时区问题
WIFI版本播报音响用户手册
03、4G 收款播报机写码
02、2G流量版收款播报机写码
.NET 服务——CI/CD(3):镜像自动分发