阿里云物联网平台之独享实例下的amqp客户端连接

简介: 服务端可以直接订阅产品下多种类型的消息:设备上报消息、设备状态变化通知、设备生命周期变更、网关发现子设备上报、设备拓扑关系变更等。配置服务端订阅后,物联网平台会将产品下所有设备的已订阅类型的消息转发至您的服务器。本文重点介绍独享实例下amqp客户端的连接以Java Demo为例。
1、首先找到控制台独享实例

image.png

2、找到接入域名

image.png

3、Java Sample

import java.net.URI;
import java.util.Hashtable;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.naming.Context;
import javax.naming.InitialContext;
import org.apache.commons.codec.binary.Base64;
import org.apache.qpid.jms.JmsConnection;
import org.apache.qpid.jms.JmsConnectionListener;
import org.apache.qpid.jms.message.JmsInboundMessageDispatch;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class AmqpJavaClientDemo {

private final static Logger logger = LoggerFactory.getLogger(AmqpJavaClientDemo.class);

public static void main(String[] args) throws Exception {
    //参数说明,请参见上一篇文档:AMQP客户端接入说明。
    String accessKey = "";
    String accessSecret = "";
    String consumerGroupId ="";
    String iotInstanceId = "";
    long timeStamp = System.currentTimeMillis();
    //签名方法:支持hmacmd5,hmacsha1和hmacsha256
    String signMethod = "hmacsha1";
    //控制台服务端订阅中消费组状态页客户端ID一栏将显示clientId参数。
    //建议使用机器UUID、MAC地址、IP等唯一标识等作为clientId。便于您区分识别不同的客户端。
    String clientId = "112233";

    //UserName组装方法,请参见上一篇文档:AMQP客户端接入说明。
    String userName = clientId + "|authMode=aksign"
            + ",signMethod=" + signMethod
            + ",timestamp=" + timeStamp
            + ",authId=" + accessKey
            + ",iotInstanceId=" + iotInstanceId
            + ",consumerGroupId=" + consumerGroupId
            + "|";
    //password组装方法,请参见上一篇文档:AMQP客户端接入说明。
    String signContent = "authId=" + accessKey + "&timestamp=" + timeStamp;
    String password = doSign(signContent,accessSecret, signMethod);
    //按照qpid-jms的规范,组装连接URL。
    String connectionUrl = "failover:(amqps://iot-cn-******.amqp.iothub.aliyuncs.com:5671?amqp.idleTimeout=80000)"
            + "?failover.reconnectDelay=30";

    Hashtable<String, String> hashtable = new Hashtable<String, String>();
    hashtable.put("connectionfactory.SBCF",connectionUrl);
    hashtable.put("queue.QUEUE", "default");
    hashtable.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.qpid.jms.jndi.JmsInitialContextFactory");
    Context context = new InitialContext(hashtable);
    ConnectionFactory cf = (ConnectionFactory)context.lookup("SBCF");
    Destination queue = (Destination)context.lookup("QUEUE");
    // Create Connection
    Connection connection = cf.createConnection(userName, password);
    ((JmsConnection) connection).addConnectionListener(myJmsConnectionListener);
    // Create Session
    // Session.CLIENT_ACKNOWLEDGE: 收到消息后,需要手动调用message.acknowledge()
    // Session.AUTO_ACKNOWLEDGE: SDK自动ACK(推荐)
    Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
    connection.start();
    // Create Receiver Link
    MessageConsumer consumer = session.createConsumer(queue);
    consumer.setMessageListener(messageListener);
}

private static MessageListener messageListener = new MessageListener() {
    @Override
    public void onMessage(Message message) {
        try {
            byte[] body = message.getBody(byte[].class);
            String content = new String(body);
            String topic = message.getStringProperty("topic");
            String messageId = message.getStringProperty("messageId");
            logger.info("receive message"
                    + ", topic = " + topic
                    + ", messageId = " + messageId
                    + ", content = " + content);
            //如果创建Session选择的是Session.CLIENT_ACKNOWLEDGE,这里需要手动ACK。
            //message.acknowledge();
            //如果要对收到的消息做耗时的处理,请异步处理,确保这里不要有耗时逻辑。
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
};

private static JmsConnectionListener myJmsConnectionListener = new JmsConnectionListener() {
    /**
     * 连接成功建立。
     */
    @Override
    public void onConnectionEstablished(URI remoteURI) {
        logger.info("onConnectionEstablished, remoteUri:{}", remoteURI);
    }

    /**
     * 尝试过最大重试次数之后,最终连接失败。
     */
    @Override
    public void onConnectionFailure(Throwable error) {
        logger.error("onConnectionFailure, {}", error.getMessage());
    }

    /**
     * 连接中断。
     */
    @Override
    public void onConnectionInterrupted(URI remoteURI) {
        logger.info("onConnectionInterrupted, remoteUri:{}", remoteURI);
    }

    /**
     * 连接中断后又自动重连上。
     */
    @Override
    public void onConnectionRestored(URI remoteURI) {
        logger.info("onConnectionRestored, remoteUri:{}", remoteURI);
    }

    @Override
    public void onInboundMessage(JmsInboundMessageDispatch envelope) {}

    @Override
    public void onSessionClosed(Session session, Throwable cause) {}

    @Override
    public void onConsumerClosed(MessageConsumer consumer, Throwable cause) {}

    @Override
    public void onProducerClosed(MessageProducer producer, Throwable cause) {}
};

/**
 * password签名计算方法,请参见上一篇文档:AMQP客户端接入说明。
 */
private static String doSign(String toSignString, String secret, String signMethod) throws Exception {
    SecretKeySpec signingKey = new SecretKeySpec(secret.getBytes(), signMethod);
    Mac mac = Mac.getInstance(signMethod);
    mac.init(signingKey);
    byte[] rawHmac = mac.doFinal(toSignString.getBytes());
    return Base64.encodeBase64String(rawHmac);
}

}

4、确认客户端在线

image.png

相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
目录
相关文章
|
7天前
|
存储 边缘计算 物联网
阿里云物联网平台:推动万物互联的智能化解决方案
随着物联网技术的快速发展,阿里云物联网平台为企业提供了一体化的解决方案,包括设备接入、数据管理和智能应用等核心功能。平台支持海量设备接入、实时数据采集与存储、边缘计算,并具备大规模设备管理、高安全性和开放生态等优势。广泛应用于智能制造、智慧城市和智能家居等领域,助力企业实现数字化转型。
56 5
|
18天前
|
Kubernetes 网络协议 物联网
桥接物联网和云:在 Kubernetes 中增强与 Kong 的 TCPIngress 的连接
桥接物联网和云:在 Kubernetes 中增强与 Kong 的 TCPIngress 的连接
30 0
|
2月前
|
Rust 安全 物联网
解锁物联网安全新纪元!Rust如何悄然革新系统级编程,让智能设备“零风险”连接未来?
【8月更文挑战第31天】随着物联网(IoT)技术的发展,设备安全与效率成为关键挑战。Rust语言凭借其内存安全、高性能和并发优势,逐渐成为物联网开发的新宠。本文通过智能门锁案例,展示Rust如何确保生物识别数据的安全传输,并高效处理多用户请求。Rust的应用不仅限于智能家居,还广泛用于工业自动化和智慧城市等领域,为物联网开发带来革命性变化。
74 1
|
2月前
|
物联网 C# 智能硬件
智能家居新篇章:WPF与物联网的智慧碰撞——通过MQTT协议连接与控制智能设备,打造现代科技生活的完美体验
【8月更文挑战第31天】物联网(IoT)技术的发展使智能家居设备成为现代家庭的一部分。通过物联网,家用电器和传感器可以互联互通,实现远程控制和状态监测等功能。本文将探讨如何在Windows Presentation Foundation(WPF)应用中集成物联网技术,通过具体示例代码展示其实现过程。文章首先介绍了MQTT协议及其在智能家居中的应用,并详细描述了使用Wi-Fi连接方式的原因。随后,通过安装Paho MQTT客户端库并创建MQTT客户端实例,演示了如何编写一个简单的WPF应用程序来控制智能灯泡。
75 0
|
2月前
|
监控 UED 开发者
从设计到监控:用Xamarin打造高可用性移动应用的实战策略与案例深度剖析
【8月更文挑战第31天】在数字化时代,移动应用成为生活工作的重要组成部分,其稳定性和可靠性至关重要。Xamarin作为跨平台开发框架,已广受认可,但如何确保应用高可用性是开发者面临的挑战。本文以电商应用“SmartShop”为例,从设计、异常处理、性能优化、多线程及测试监控五个方面探讨构建高可用性Xamarin应用的最佳实践。通过模块化设计、有效异常处理、性能优化、多线程技术和全面测试监控,确保应用稳定高效,提升用户体验。
33 0
|
2月前
|
物联网 监控 API
探索Xamarin在物联网浪潮中的宝石般闪耀:跨平台框架如何成为连接智能设备的桥梁并预示着技术的未来
【8月更文挑战第31天】在数字化转型中,物联网通过设备互联提升了生活与工作的智能化水平。Xamarin凭借其跨平台特性,在物联网开发中展现出巨大潜力,能够以一套代码同时支持多个操作系统,显著降低开发成本。通过高效的硬件交互与稳定的性能表现,Xamarin不仅优化了物联网应用的开发流程,还为未来的持续进化奠定了坚实基础。
52 0
|
21天前
|
供应链 物联网 区块链
未来技术的浪潮之下——区块链、物联网与虚拟现实的融合与发展
【9月更文挑战第35天】在技术不断进步的今天,新兴技术如区块链、物联网和虚拟现实正在改变我们的生活方式。本文将深入探讨这些技术的发展趋势,以及它们如何在不同领域中应用,从而带来创新和便利。我们将通过具体的例子来展示这些技术如何相互融合,共同推动社会向前发展。
|
2天前
|
存储 供应链 物联网
探索未来:区块链、物联网与虚拟现实技术的融合与创新
【10月更文挑战第15天】本文深入探讨了新兴技术如区块链、物联网(IoT)和虚拟现实(VR)的发展趋势及其在现代社会的应用。通过分析这些技术的独特属性和它们如何相互补充,我们揭示了一个由高度互联、智能化和沉浸式体验定义的未来图景。文章不仅讨论了这些技术当前的挑战,还展望了它们在未来可能带来的转变,旨在为读者提供对这些令人兴奋的技术趋势的全面理解。
|
2天前
|
安全 物联网 区块链
未来已来:探索区块链技术、物联网与虚拟现实的融合趋势
【10月更文挑战第15天】 在数字化浪潮中,区块链、物联网(IoT)和虚拟现实(VR)技术正引领着一场革命。本文将深入探讨这三种技术的发展趋势和相互融合的潜力,以及它们如何共同塑造我们的未来。我们将从基本概念入手,逐步揭示这些技术如何影响经济、社会和日常生活,同时提供具体应用场景以展示其变革力量。
|
4天前
|
传感器 监控 物联网
新技术趋势与应用在科技日新月异的今天,新兴技术如物联网、虚拟现实等正以前所未有的速度改变着我们的生活。本文将深入探讨这些技术的发展趋势和应用场景,揭示它们如何塑造未来。
本文聚焦于物联网和虚拟现实等新兴技术的发展动态及其广泛应用。通过分析当前技术进展、实际应用案例以及未来发展的可能性,本文揭示了这些技术如何深刻影响各行各业,并对未来的趋势进行了展望。

相关产品

  • 物联网平台