mqttClient是一个储存在内存中的对象,一旦服务器重启或者项目发版,必须让刚刚正在工作的消费方重新启动起来
同时我们需要将这些对象储存起来,方便我们手动关闭监听
一个仓库+一个线程哨兵
上代码
package com.datacvg.config;
import com.datacvg.dao.ExchangeMqWithDatabaseMapper;
import com.datacvg.mqtt.DatasourceCrossClient;
import com.datacvg.vo.ExchangeMqPushDatabaseVo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.util.*;
/**
* @Author: 商朝
* @Date: 2021.4.15
* @Function: 正在运行客户端的仓库+重启服务器扫描正在运行的服务重启并入库
*/
@Component
public class RestartMqttClientConfig {
private final HashMap<String,DatasourceCrossClient> runningClient =new HashMap<>();
@Autowired
ExchangeMqWithDatabaseMapper exchangeMqWithDatabaseMapper;
@Autowired
RestartMqttClientConfig checkStock;
@PostConstruct
public void restartListen(){
try {
//查出正在运行的服务
List<ExchangeMqPushDatabaseVo> listClient = exchangeMqWithDatabaseMapper.queryAllRunningClient();
//用于储存已经开服务的客户端和datasourceId的对应关系

本文介绍了一种在服务器重启后恢复 MQTT 客户端连接的方法,并通过使用 HashMap 存储活动客户端来实现手动关闭监听的功能。该方案利用数据库记录运行中的客户端状态,并在重启后自动恢复。
最低0.47元/天 解锁文章
4241

被折叠的 条评论
为什么被折叠?



