1. 登录EMQX Dashboard
2. 点击集成->桥接模式->创建

3. 选择webhook,下一步

4. 配置桥接模式,填写名称/URL/请求体(请求体可以不填)


5. 创建上面桥接模式的规则添加动作



6. 创建上面桥接模式的规则添加事件,拉到最下面创建(这里不需要解释了吧)

7. 接下来就是写一个post接口对应我们第四步的URL作为回调就ok了。
1. 枚举
@Getter
@AllArgsConstructor
public enum MqttEvent {
/**
* 在线为true
*/
CONNECTED("client.connected", Boolean.TRUE),
/**
* 离线为false
*/
DISCONNECTED("client.disconnected", Boolean.FALSE),
;
private final String event;
private final Boolean data;
public static Boolean getData(String event) {
for (MqttEvent value : MqttEvent.values()) {
if (Objects.equals(value.getEvent(), event)) {
return value.getData();
}
}
return false;
}
}
2.实体
@Data
public class ApiDeviceOnlineStateDTO implements Serializable {
private static final long serialVersionUID = -2617214908654902132L;
@ApiModelProperty("客户端标识")
private String clientId;
@ApiModelProperty("事件")
private String event;
}
3. controller
@Api(tags = "API-webhook通知相关接口")
@RestController
@RequestMapping("/notify")
public interface ApiWebhookNotifyFace {
@ApiOperation("设备状态回调通知")
@PostMapping("/device_online_state")
void deviceOnlineState(@RequestBody ApiDeviceOnlineStateDTO dto);
}
4. 实现
@Slf4j
@Service
@RequiredArgsConstructor
public class ApiWebhookNotifyApp implements ApiWebhookNotifyFace {
@Override
public void deviceOnlineState(ApiDeviceOnlineStateDTO dto) {
log.info("设备状态回调通知参数:{}", dto);
boolean event = MqttEvent.getData(dto.getEvent());
}
}