物联网平台消息总线设计

物联网平台消息总线设计

一个物联网平台会有很多的消息类型,如设备上报的数据消息,设备离线,设备上线等消息。传统的消息处理无法满足错综复杂的物联网平台,基于主题订阅的消息模型是很适合用在物联网领域。

采用技术

本设计采用rabbitmq 实现基于topic的主题订阅消息模型

消息总线设计

所有设备相关消息的 routingKey 格式均为:device.{productId}.{deviceId}.{messageType}.{messageTypeId}

支持模糊匹配(# 匹配一个或多个单词的情况,* 匹配一个单词的情况)

说明:

{productId}:设备产品id;

{deviceId}:设备实例id;

{messageType}:消息类型;

{messageTypeId}:消息类型的具体内容id;

例子:

device.123.456.event.789

表示产品id为123,设备id为456,消息类型为event,类型的具体内容id为789

使用:

下面的代码表示监听所有设备的 event 消息

@Subscribe("device.*.*.event.*")
public void message1(String s){
     
    System.out.println("message1" + s);
}

好处

无需关注rabbitmq 的相关配置,只需要一个注解即可开启消息订阅,屏蔽了底层的队列等具体细节。

实现方案

1.首先自定义注解,参考@RabbitListener,必须值,路由key(routingKey )

2.参考@RabbitListener的实现,将所有 routingKey 绑定到一个单独匿名队列(名字随机,断开即自动销毁,不持久化)中

具体实现思路参考文章 @RabbitListener源码解析

**源码地址:https://github.com/xsShuang/iot-msg-bus**

你可能感兴趣的:(物联网,rabbitmq)