Я хочу установить 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
Очень нужна помощь. Мне трудно заставить своих клиентов MQTT подписаться на тему, не имея ⇐ JAVA
Программисты JAVA общаются здесь
1763464262
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);
}
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79823285/really-need-helpim-struggling-with-my-mqtt-clients-to-subscribe-to-a-topic-with[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия