src/main/java/com/fzzy/api/data/GatewayDeviceProtocol.java
@@ -18,7 +18,7 @@ DEVICE_IDCARD_HTTP("DEVICE_IDCARD_HTTP", "身份è¯-HTTPåè®®"), DEVICE_LED_HTTP("DEVICE_LED_HTTP", "LED-HTTPåè®®"), DEVICE_LPR_SDK_HK("DEVICE_LPR_SDK_HK", "车çè¯å«-SDK海康"), DEVICE_TEST("DEVICE_TEST", "空åè®®"); DEVICE_TEST("DEVICE_TEST", "æµè¯åè®®"); private String code; src/main/java/com/fzzy/api/utils/NumberUtil.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,49 @@ package com.fzzy.api.utils; import java.math.BigDecimal; import java.text.DecimalFormat; /** * æ°åæ ¼å¼åå·¥å ·ç±» */ public class NumberUtil { /** * 对doubleç±»åçæ°å¼ä¿çæå®ä½æ°çå°æ°ã<br> * è¯¥æ¹æ³èå ¥æ¨¡å¼ï¼åâææ¥è¿çâæ°åèå ¥ï¼å¦æä¸ä¸¤ä¸ªç¸é»æ°åçè·ç¦»ç¸çï¼å为åä¸èå ¥çèå ¥æ¨¡å¼ã<br> * <b>注æï¼</b>å¦æç²¾åº¦è¦æ±æ¯è¾ç²¾ç¡®è¯·ä½¿ç¨ keepPrecision(String number, int precision)æ¹æ³ * @param number è¦ä¿çå°æ°çæ°å * @param precision å°æ°ä½æ° * @return double 妿æ°å¼è¾å¤§ï¼å使ç¨ç§å¦è®¡æ°æ³è¡¨ç¤º */ public static double keepPrecision(Double number, int precision) { if(null == number || 0.0 == number ) return 0.0; BigDecimal bg = new BigDecimal(number); return bg.setScale(precision, BigDecimal.ROUND_HALF_UP).doubleValue(); } /** * 对floatç±»åçæ°å¼ä¿çæå®ä½æ°çå°æ°ã<br> * è¯¥æ¹æ³èå ¥æ¨¡å¼ï¼åâææ¥è¿çâæ°åèå ¥ï¼å¦æä¸ä¸¤ä¸ªç¸é»æ°åçè·ç¦»ç¸çï¼å为åä¸èå ¥çèå ¥æ¨¡å¼ã<br> * <b>注æï¼</b>å¦æç²¾åº¦è¦æ±æ¯è¾ç²¾ç¡®è¯·ä½¿ç¨ keepPrecision(String number, int precision)æ¹æ³ * @param number è¦ä¿çå°æ°çæ°å * @param precision å°æ°ä½æ° * @return float 妿æ°å¼è¾å¤§ï¼å使ç¨ç§å¦è®¡æ°æ³è¡¨ç¤º */ public static float keepPrecision(Float number, int precision) { if(null == number) return 0f; BigDecimal bg = new BigDecimal(number); return bg.setScale(precision, BigDecimal.ROUND_HALF_UP).floatValue(); } /** * double转å符串ï¼é¿å åºç°ç§å¦è®¡æ°æ³ * @param d * @return */ public static String doubleToStr(Double d) { if(null == d) return ""; DecimalFormat df = new DecimalFormat("0.0"); return df.format(d); } } src/main/java/com/fzzy/gateway/GatewayRunner.java
@@ -22,11 +22,20 @@ private ApiInitService apiInitService; @Autowired private MqttPublishService mqttPublishService; @Autowired private GatewayTimerScheduled scheduled; @Override public void run(String... args) throws Exception { mqttPublishService.init(); //æ§è¡åå§åæ¹æ¡ apiInitService.init(); //è·åæ°è±¡ä¿¡æ¯ scheduled.doWeatherExe(); } } src/main/java/com/fzzy/gateway/GatewayTimerScheduled.java
@@ -1,14 +1,18 @@ package com.fzzy.gateway; import com.alibaba.fastjson.JSON; import com.fzzy.api.data.ApiParam; import com.fzzy.api.entity.ApiConfs; import com.fzzy.api.service.*; import com.fzzy.api.utils.ContextUtil; import com.fzzy.api.utils.RedisUtil; import com.fzzy.gateway.api.GatewayRemoteManager; import com.fzzy.gateway.data.WeatherWebDto; import com.fzzy.gateway.entity.GatewayConf; import com.fzzy.gateway.service.GatewayConfService; import com.fzzy.gateway.util.GatewayHttpUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.time.DateUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; @@ -24,6 +28,12 @@ @Slf4j @Component(GatewayTimerScheduled.BEAN_ID) public class GatewayTimerScheduled { public static String DEFAULT_URL = "https://v0.yiketianqi.com/api?unescape=1&version=v61&appid={appId}&appsecret={appsecret}&cityid={cityid}"; public static String DEFAULT_APP_ID = "49421971"; public static String DEFAULT_APP_SECRET = "JmJE48Fv"; public static String DEFAULT_CITYID = "101270101";//æé½ public static final String BEAN_ID = "gateway.timerScheduled"; @@ -46,6 +56,44 @@ } /** * æ¯é´é30åéæ§è¡ä¸æ¬¡ */ @Scheduled(cron = "0 0/30 * * * ?") public void scheduled30() { //宿¶è·åæ°è±¡ä¿¡æ¯ doWeatherExe(); } public void doWeatherExe() { try { String url = DEFAULT_URL; url = url.replace("{appId}", DEFAULT_APP_ID).replace("{appsecret}", DEFAULT_APP_SECRET).replace("{cityid}", DEFAULT_CITYID); String result = GatewayHttpUtil.doGet(url, null); if (null == result) { log.error("å½åå¤ç½è·åæ°è±¡ä¿¡æ¯å¤±è´¥â¦â¦"); return; } WeatherWebDto dto = JSON.parseObject(result, WeatherWebDto.class); if (StringUtils.isNotEmpty(dto.getErrcode())) { log.error("å½åå¤ç½è·åæ°è±¡ä¿¡æ¯å¼å¸¸:{}", dto.getErrmsg()); return; } WeatherWebDto.contextMap.put("default", dto); log.info("===========================ç³»ç»å®æ¶è·è·åæ°è±¡ä¿¡æ¯===={}==================",dto); } catch (Exception e) { } } /** * æ§è¡ç½å ³å¿è·³ @@ -63,5 +111,5 @@ gatewayRemoteManager.getRemoteService(conf.getPushProtocol()).heartbeat(conf); } } } src/main/java/com/fzzy/gateway/api/GatewaySyncGranService.java
@@ -1,6 +1,7 @@ package com.fzzy.gateway.api; import com.fzzy.gateway.data.BaseResp; import com.fzzy.gateway.hx2023.data.KafaGrainData; import com.fzzy.gateway.hx2023.data.*; @@ -25,4 +26,11 @@ public KafaGrainData syncGrain(SyncReqData reqData); /** * åæ¥ç²®æ ä¿¡æ¯è¿åJSONæ¥æ * * @param reqData * @return */ public BaseResp syncGrain2(SyncReqData reqData); } src/main/java/com/fzzy/gateway/data/BaseResp.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,14 @@ package com.fzzy.gateway.data; import lombok.Data; @Data public class BaseResp { private int code = 200; private String msg = "æå"; private String data; } src/main/java/com/fzzy/gateway/data/WeatherWebDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,51 @@ package com.fzzy.gateway.data; import lombok.Data; import java.io.Serializable; import java.util.HashMap; import java.util.Map; /** * * @author: andy.jia * @description: å¤ç½æ°è±¡è§£æä½¿ç¨DTO * @version: * @data:2019å¹´12æ7æ¥ * */ @Data public class WeatherWebDto implements Serializable { public static Map<String,WeatherWebDto> contextMap = new HashMap<>(); /** * */ private static final long serialVersionUID = 1L; private String errcode;//é误ç¼ç private String errmsg;//éè¯¯ä¿¡æ¯ private String cityid;// å½ååå¸ID private String city;//åå¸åç§° private String update_time;// æ°è±¡å°æ´æ°æ¶é´ private String date;// æ¥æ private String week;// ææ private String wea;// å¤©æ°æ åµ private String wea_img;// 天æ°å¯¹åºå¾æ (xue, lei, shachen, wu, bingbao, yun, yu,yin, qing) private String tem;// å½å温度 private String air;// 空æ°è´¨é private String air_pm25;// PM2.5 private String air_level;// 空æ°è´¨éç级 private String air_tips;// 空æ°è´¨éæè¿° private String humidity;// 湿度 private String visibility;// è½è§åº¦ private String pressure;// æ°åhPa private String win;// é£å private String win_speed;// é£éç级 private String win_meter;// é£é å¦: 12km/h private String alarm;// é¢è¦ä¿¡æ¯ } src/main/java/com/fzzy/gateway/entity/GatewayDevice.java
@@ -105,4 +105,13 @@ @PropertyDef(label = "夿³¨", description = "夿³¨ä¿¡æ¯") private String remark; @Column(name = "CABLE_RULE_", length = 20) @PropertyDef(label = "å¸çº¿è§å", description = "å¹³æ¹ä»è¡¨ç¤ºå±è¡åï¼çä»è¡¨ç¤ºæ¯åçåæ°") private String cableRule; @Column(name = "CABLE_CIR_", length = 20) @PropertyDef(label = "çä»å±è§å", description = "é对çä»") private String cableCir; } src/main/java/com/fzzy/gateway/hx2023/ScConstant.java
@@ -12,6 +12,13 @@ public static String MESSAGE_TYPE_REPORT_PROPERTY = "REPORT_PROPERTY"; public static String MESSAGE_TYPE_INVOKE_FUNCTION = "INVOKE_FUNCTION"; /** * ç²®æ éæä»¤ */ public static String FUNCTION_getTAndRHInfo = "getTAndRHInfo"; public static String getMessageId() { return System.currentTimeMillis() + RandomUtils.nextInt(1000) + ""; src/main/java/com/fzzy/gateway/hx2023/data/ClientHeaders.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,12 @@ package com.fzzy.gateway.hx2023.data; import lombok.Data; @Data public class ClientHeaders { private String productId; private String deviceName; private String orgId; private String msgId; } src/main/java/com/fzzy/gateway/hx2023/data/CloudHeaders.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,11 @@ package com.fzzy.gateway.hx2023.data; import lombok.Data; @Data public class CloudHeaders { private String productId; private String deviceName; private String orgId; } src/main/java/com/fzzy/gateway/hx2023/data/CloudSendData.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,28 @@ package com.fzzy.gateway.hx2023.data; import lombok.Data; import java.util.List; /** * äºç«¯åå¨çæ¥æ */ @Data public class CloudSendData { private CloudHeaders headers; private String functionId; private String messageType; private String messageId; private String deviceId; private String timestamp; private boolean success; private List<InputData> inputs; } src/main/java/com/fzzy/gateway/hx2023/data/GrainData.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,29 @@ package com.fzzy.gateway.hx2023.data; import lombok.Data; /** * ç²®æ ä¿¡æ¯ */ @Data public class GrainData { //设å¤ç¼ç private String deviceId; private ClientHeaders headers; //æ¶æ¯ ID private String messageId; private String messageType = "INVOKE_FUNCTION_REPLY"; private boolean success = true; private String timestamp; private GrainOutPut outPut; private GrainWeather weatherStation; } src/main/java/com/fzzy/gateway/hx2023/data/GrainOutPut.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,42 @@ package com.fzzy.gateway.hx2023.data; import com.alibaba.fastjson2.JSONObject; import lombok.Data; import java.util.List; /** * ç²®æ ä¿¡æ¯ */ @Data public class GrainOutPut { //模åè¯å«ç -常éï¼åºå®ä¼ apiTemperature private String apISource = "apiTemperature"; //æ´ä»å¹³å温度 private String avgTemperature; //æ´ä»æé«æ¸©åº¦ private String maxTemperature; //æ´ä»æä½æ¸©åº¦ private String minTemperature; private String minX = "0"; private String minY = "0"; private String minZ = "0"; private String maxX = "0"; private String maxY = "0"; private String maxZ = "0"; private List<GrainTemp> temperature; } src/main/java/com/fzzy/gateway/hx2023/data/GrainTemp.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,45 @@ package com.fzzy.gateway.hx2023.data; import lombok.Data; /** * ç²®æ ä¿¡æ¯è¯¦ç» */ @Data public class GrainTemp { //æ ¹å· private String cableNum; //å±å· private String layerNumber; //æ¸©åº¦å¼ private String temperature; //ç´¢å¼ï¼ä»0å¼å§ private String position; // //è¯¥æ¸©åº¦ç¹æå¨çå,å¹³æ¹ä»ãå°ä¸ä»å¿ å¡« // private String linex; // // //è¯¥æ¸©åº¦ç¹æå¨çè¡,å¹³æ¹ä»ãå°ä¸ä»å¿ å¡« // private String rowy; //æµ åä»ãçä»å¿ å¡«ï¼ç¤ºä¾ï¼{\"totalCircle\":3,\"smallCircle\":\"4,10,16\"}ï¼totalCircleï¼æ»åæ°ï¼smallCircleï¼æ¯åæå æ ¹ç¼ private String total_circle; //å ·ä½åæ°--æµ åä»ãçä»å¿ å¡« private String circle; public GrainTemp() { } public GrainTemp(String cableNum, String layerNumber, String temperature, String position) { this.cableNum = cableNum; this.layerNumber = layerNumber; this.temperature = temperature; this.position = position; } } src/main/java/com/fzzy/gateway/hx2023/data/GrainWeather.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,31 @@ package com.fzzy.gateway.hx2023.data; import lombok.Data; @Data public class GrainWeather { private String airPressure; private String humidity; private String id; private String messageId; private String pm; private String radiation; private String rainfallAmount; private String temperature; private String windAngle; private String windDirection; private String windPower; private String windSpeed; } src/main/java/com/fzzy/gateway/hx2023/data/InputData.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,10 @@ package com.fzzy.gateway.hx2023.data; import lombok.Data; @Data public class InputData { private String name; private String value; } src/main/java/com/fzzy/gateway/hx2023/data/SyncReqData.java
@@ -1,5 +1,6 @@ package com.fzzy.gateway.hx2023.data; import com.fzzy.gateway.entity.GatewayDevice; import lombok.Data; @Data @@ -16,4 +17,8 @@ private String functionId; private String jsonData; private GatewayDevice device; private boolean autoReplay; } src/main/java/com/fzzy/gateway/hx2023/service/HxGatewaySyncGrainImpl.java
@@ -1,11 +1,21 @@ package com.fzzy.gateway.hx2023.service; import com.alibaba.fastjson2.JSONObject; import com.fzzy.api.data.GatewayDeviceProtocol; import com.fzzy.api.utils.NumberUtil; import com.fzzy.gateway.api.GatewaySyncGranService; import com.fzzy.gateway.hx2023.data.KafaGrainData; import com.fzzy.gateway.hx2023.data.SyncReqData; import com.fzzy.gateway.data.BaseResp; import com.fzzy.gateway.data.WeatherWebDto; import com.fzzy.gateway.entity.GatewayDevice; import com.fzzy.gateway.hx2023.ScConstant; import com.fzzy.gateway.hx2023.data.*; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.List; /** * ç½å ³ä¸ç²®æ åæºé讯åè§£æ @@ -18,11 +28,105 @@ @Override public String getGrainProtocol() { return null; return GatewayDeviceProtocol.DEVICE_TEST.getCode(); } @Override public KafaGrainData syncGrain(SyncReqData reqData) { return null; } @Override public BaseResp syncGrain2(SyncReqData reqData) { GatewayDevice device = reqData.getDevice(); if (StringUtils.isEmpty(device.getCableCir())) { return getGrainTest1(reqData, device); } BaseResp resp = new BaseResp(); resp.setCode(500); resp.setMsg("没æå¹é å°è§å"); return resp; } private BaseResp getGrainTest1(SyncReqData reqData, GatewayDevice device) { String[] cableRule = device.getCableRule().split("-"); int cableZ = Integer.valueOf(cableRule[0]); int cableY = Integer.valueOf(cableRule[1]); int cableX = Integer.valueOf(cableRule[2]); int sumNum = cableZ * cableY * cableX; WeatherWebDto weather = WeatherWebDto.contextMap.get("default"); double tMIn = 20, tMax = 25; if (null != weather) { double tOut = Double.valueOf(weather.getTem()); tMIn = tOut - 2; tMax = tOut + 3; } //æ°æ®å°è£ GrainData grain = new GrainData(); grain.setMessageId(ScConstant.getMessageId()); grain.setDeviceId(device.getDeviceId()); grain.setTimestamp(System.currentTimeMillis() + ""); ClientHeaders headers = new ClientHeaders(); headers.setDeviceName(device.getDeviceName()); headers.setProductId(device.getProductId()); headers.setOrgId(device.getOrgId()); headers.setMsgId(ScConstant.getMessageId()); grain.setHeaders(headers); GrainOutPut outPut = new GrainOutPut(); outPut.setAvgTemperature(NumberUtil.keepPrecision((tMax + tMIn) / 2, 1) + ""); outPut.setMinTemperature(tMax + ""); outPut.setMaxTemperature(tMIn + ""); List<GrainTemp> temperature = new ArrayList<>(); //æ ¹å· int cableNum = 1, position = 0; double curTemp = tMIn; double randomNumber = tMIn; int x = 0, y = 0, z = 0; for (int i = 0; i < sumNum; i++) { randomNumber = Math.random() * (tMax - tMIn + 1) + tMIn; curTemp = NumberUtil.keepPrecision(randomNumber, 1); position = i; z = i % cableZ + 1; x = i / (cableZ * cableY); y = x * (cableZ * cableY); y = (i - y) / cableZ; //æ ¹å· cableNum = (i / cableZ) + 1; temperature.add(new GrainTemp(cableNum + "", z + "", curTemp + "", position + "")); } outPut.setTemperature(temperature); grain.setOutPut(outPut); BaseResp resp = new BaseResp(); resp.setData(JSONObject.toJSONString(grain)); return resp; } } src/main/java/com/fzzy/gateway/hx2023/service/OnReceiveMqttService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,82 @@ package com.fzzy.gateway.hx2023.service; import com.alibaba.fastjson2.JSONObject; import com.fzzy.gateway.GatewayUtils; import com.fzzy.gateway.api.GatewayRemoteManager; import com.fzzy.gateway.hx2023.data.CloudSendData; import com.fzzy.gateway.entity.GatewayDevice; import com.fzzy.gateway.hx2023.ScConstant; import com.fzzy.gateway.data.BaseResp; import com.fzzy.gateway.hx2023.data.SyncReqData; import com.fzzy.mqtt.MqttProviderConfig; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.annotation.Resource; /** * æ ¹æ®æ¥åå°çMQTTä¿¡æ¯æ§è¡ */ @Slf4j @Component public class OnReceiveMqttService { @Resource private GatewayRemoteManager gatewayRemoteManager; @Resource private MqttProviderConfig providerClient; /** * å½åæ¥æ¶å°äºç«¯åéä¿¡æ¯ * * @param message */ public void onReceiveMessage(String message) { try { CloudSendData cloudSendData = JSONObject.parseObject(message, CloudSendData.class); String functionId = cloudSendData.getFunctionId(); //ç²®æ éé if (ScConstant.FUNCTION_getTAndRHInfo.equals(functionId)) { getTAndRHInfo(cloudSendData); } } catch (Exception e) { } } private void getTAndRHInfo(CloudSendData cloudSendData) { String deviceId = cloudSendData.getDeviceId(); GatewayDevice device = GatewayUtils.getCacheByDeviceId(deviceId); SyncReqData syncReqData = new SyncReqData(); syncReqData.setDeviceId(deviceId); syncReqData.setMessageId(cloudSendData.getMessageId()); syncReqData.setMessageType(cloudSendData.getMessageType()); syncReqData.setFunctionId(cloudSendData.getFunctionId()); syncReqData.setAutoReplay(true); syncReqData.setDevice(device); BaseResp resp = gatewayRemoteManager.getSyncGrainService(device.getSyncProtocol()).syncGrain2(syncReqData); //èªå¨æ¨é if (200 == resp.getCode() && syncReqData.isAutoReplay()) { String topic = "/${productId}/${deviceId}/properties/report"; topic = topic.replace("${productId}", device.getProductId()).replace("${deviceId}", device.getDeviceId()); providerClient.publish(topic, resp.getData()); log.info("=======ç²®æ æ¨é==========={}", resp.getData()); } } } src/main/java/com/fzzy/gateway/service/GatewayDeviceService.java
@@ -113,6 +113,9 @@ /** * gatewayDeviceService#ajaxTestWeight * å°ç£ æ¨éæµè¯ src/main/java/com/fzzy/gateway/view/GatewayDevice.view.xml
@@ -111,8 +111,16 @@ <Property name="label">èªå®ä¹ä»åºç¼ç </Property> </PropertyDef> <PropertyDef name="productId"> <Property/> <Property></Property> <Property name="label">设å¤ç±»åKEY</Property> </PropertyDef> <PropertyDef name="cableRule"> <Property/> <Property name="label">å¸çº¿è§å</Property> </PropertyDef> <PropertyDef name="cableCir"> <Property/> <Property name="label">çä»å±è§å</Property> </PropertyDef> </DataType> </Model> @@ -332,6 +340,16 @@ <Property name="editorType">TextArea</Property> <Editor/> </AutoFormElement> <AutoFormElement> <Property name="name">cableRule</Property> <Property name="property">cableRule</Property> <Editor/> </AutoFormElement> <AutoFormElement> <Property name="name">cableCir</Property> <Property name="property">cableCir</Property> <Editor/> </AutoFormElement> </AutoForm> </Container> </Children> src/main/java/com/fzzy/mqtt/MqttConsumerCallBack.java
@@ -1,17 +1,27 @@ package com.fzzy.mqtt; import com.fzzy.gateway.hx2023.service.OnReceiveMqttService; import lombok.extern.slf4j.Slf4j; import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken; import org.eclipse.paho.client.mqttv3.MqttCallback; import org.eclipse.paho.client.mqttv3.MqttMessage; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Slf4j @Component public class MqttConsumerCallBack implements MqttCallback { @Autowired private OnReceiveMqttService onReceiveMqttService; /** * 客æ·ç«¯æå¼è¿æ¥çåè° */ @Override public void connectionLost(Throwable throwable) { System.out.println("䏿å¡å¨æå¼è¿æ¥ï¼å¯éè¿"); log.info("䏿å¡å¨æå¼è¿æ¥ï¼å¯éè¿"); } /** @@ -20,10 +30,17 @@ @Override public void messageArrived(String topic, MqttMessage message) throws Exception { System.out.println(String.format("æ¥æ¶æ¶æ¯ä¸»é¢ : %s", topic)); System.out.println(String.format("æ¥æ¶æ¶æ¯Qos : %d", message.getQos())); System.out.println(String.format("æ¥æ¶æ¶æ¯å 容 : %s", new String(message.getPayload()))); System.out.println(String.format("æ¥æ¶æ¶æ¯retained : %b", message.isRetained())); String messageStr = new String(message.getPayload()); log.info(String.format("æ¥æ¶æ¶æ¯ä¸»é¢ : %s", topic)); log.info(String.format("æ¥æ¶æ¶æ¯Qos : %d", message.getQos())); log.info(String.format("æ¥æ¶æ¶æ¯å 容 : %s", messageStr)); log.info(String.format("æ¥æ¶æ¶æ¯retained : %b", message.isRetained())); onReceiveMqttService.onReceiveMessage(messageStr); } /** @@ -31,6 +48,6 @@ */ @Override public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) { System.out.println(String.format("æ¥æ¶æ¶æ¯æå")); log.info(String.format("æ¥æ¶æ¶æ¯æå")); } } src/main/java/com/fzzy/mqtt/MqttConsumerConfig.java
@@ -14,6 +14,9 @@ @Autowired private MqttProperties mqttProperties; @Autowired private MqttConsumerCallBack mqttConsumerCallBack; /** * 客æ·ç«¯å¯¹è±¡ */ @@ -50,7 +53,8 @@ //设置é屿¶æ¯çè¯é¢ï¼è¥å®¢æ·ç«¯åæå¡å¨ä¹é´çè¿æ¥æå¤æå¼ï¼æå¡å¨å°åå¸å®¢æ·ç«¯çéå±ä¿¡æ¯ options.setWill("willTopic", (mqttProperties.getClientInId() + "䏿å¡å¨æå¼è¿æ¥").getBytes(), 0, false); //设置åè° client.setCallback(new MqttConsumerCallBack()); // client.setCallback(new MqttConsumerCallBack()); client.setCallback(mqttConsumerCallBack); client.connect(options); //订é ä¸»é¢ //æ¶æ¯ç级ï¼å䏻颿°ç»ä¸ä¸å¯¹åºï¼æå¡ç«¯å°æç §æå®ç级ç»è®¢é äºä¸»é¢ç客æ·ç«¯æ¨éæ¶æ¯