Очень нужна помощь. Мне трудно заставить своих клиентов MQTT подписаться на тему, не имеяJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Очень нужна помощь. Мне трудно заставить своих клиентов MQTT подписаться на тему, не имея

Сообщение Anonymous »

Я хочу установить java17!пожалуйста!мне очень нужна помощь. Я пытаюсь с моими MQTT-клиентами подписаться на тему без подписки на тему несколько раз после того, как клиент некоторое время работает. (У меня также есть проблема с тем, что клиенты больше не обрабатывают входящие сообщения по некоторым темам после того, как клиент некоторое время работает (возможно, потому, что брокер забывает о подписках), но это уже другая тема, которую следует задать в другом вопросе. Но именно по этой причине я перешел с постоянных сеансов на cleanStart(true) + sessionExpiryInterval(0). (Это не помогло.))
Я новичок в MQTT и Клиент HiveMQ, поэтому с моей стороны может возникнуть некоторое недоразумение. Также приветствуются любые идеи по улучшению или альтернативные подходы к моему коду.
Я использую брокер сообщений Mosquitto 2.0.22 на Windows Server 2019 (я бы предпочел Linux, но на данный момент я привязан к Windows). Конфигурация брокера:
public class Ref154PostProcess extends RefApiPost {

@Override
public ResBasisEntity execute(Map req, RefExtMainMst mst, Object data, Exception e) {
ResBasisEntity res = super.execute(req, mst, data, e);

if (res == null || res.payload == null) {
return res;
}

try {
// 处理 payload -> estmProdInfo
List prodList = safeGetList(res.payload, "estmProdInfo");
if (prodList == null) {
return res;
}

for (Map prod : prodList) {
// 1. 清理 estmProdAttInfo 中多余父 ID
removeParentId(safeGetList(prod, "estmProdAttInfo"), "estmSubscriptionId");

// 2. 商材层 estmCostInfo (重命名 + 清理)
cleanCostInfo(prod, "estmCostInfo_Prod", "estmSubscriptionId");

// 3. プラン层
List planList = safeGetList(prod, "estmPlanInfo");
if (planList != null) {
for (Map plan : planList) {
// 3a. 清理 estmPlanAttributeInfo 中多余父 ID
removeParentId(safeGetList(plan, "estmPlanAttributeInfo"), "estmRatePlanId");

// 3b. プラン层 estmCostInfo (重命名 + 清理)
cleanCostInfo(plan, "estmCostInfo_Plan", "estmRatePlanId");

// 3c. 課金层
List chargeList = safeGetList(plan, "estmRatePlanChargeInfo");
if (chargeList != null) {
for (Map charge : chargeList) {
// 3c-1. 清理 estmBillUsage 的父 ID
removeParentIdFromMap(safeGetMap(charge, "estmBillUsage"), "estmRatePlanChargeId");

// 3c-2. 課金层 estmCostInfo (重命名 + 清理)
cleanCostInfo(charge, "estmCostInfo_Charge", "estmRatePlanChargeId");

// 3c-3. 清理 estmRatePlanChargeTierInfo 多余父 ID
removeParentId(safeGetList(charge, "estmRatePlanChargeTierInfo"), "estmRatePlanChargeId");
}
}
}
}
}
} catch (Exception ex) {
// 记录日志但不影响原有响应
// Logger.error("Failed to clean response data", ex);
}

return res;
}

/**
* 安全获取 List (避免 ClassCastException)
*/
@SuppressWarnings("unchecked")
private List safeGetList(Map map, String key) {
Object obj = map.get(key);
if (obj instanceof List) {
return (List) obj;
}
return null;
}

/**
* 安全获取 Map (避免 ClassCastException)
*/
@SuppressWarnings("unchecked")
private Map safeGetMap(Map map, String key) {
Object obj = map.get(key);
if (obj instanceof Map) {
return (Map) obj;
}
return null;
}

/**
* 批量删除列表中所有项的指定父 ID
*/
private void removeParentId(List list, String parentIdKey) {
if (list != null) {
for (Map item : list) {
item.remove(parentIdKey);
}
}
}

/**
* 从单个 Map 删除父 ID
*/
private void removeParentIdFromMap(Map map, String parentIdKey) {
if (map != null) {
map.remove(parentIdKey);
}
}

/**
* 清理 CostInfo 及其 costCalcParamInfo 中多余父 ID
* 并统一字段名为 estmCostInfo
*
* @param parent 父对象 (商材/プラン/課金)
* @param costInfoKey 原始键名 (estmCostInfo_Prod/Plan/Charge)
* @param parentIdKey 要删除的父 ID 键名
*/
private void cleanCostInfo(Map parent, String costInfoKey, String parentIdKey) {
List costList = safeGetList(parent, costInfoKey);

if (costList != null) {
for (Map cost : costList) {
// 移除多余父 ID
cost.remove(parentIdKey);

// 清理 costCalcParamInfo 中的父 CostInfo ID
removeParentId(safeGetList(cost, "costCalcParamInfo"), "estmCostId");
}

// 统一重命名为 estmCostInfo
if (!"estmCostInfo".equals(costInfoKey)) {
parent.put("estmCostInfo", costList);
parent.remove(costInfoKey);
}
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/798 ... topic-with
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»