解决思路:使用 Message 类进行接收,再转想要的类型。
@Component
@Slf4j
public class DataSyncTestEventMsg {
@Autowired
public DemoService demoService;
@JmsListener(destination= "0.system.inoutmanage.datasync.managedperson", containerFactory="topicListenerFactory")
public void topicReceive(Message message) throws JMSException {
//从前端的MQTT发送过来的是byte[]类型,要转换
if (message instanceof BytesMessage){
//强制类型转换,Message是接口或者父类,所以可以用其子类BytesMessage强制转换,ActiveMQ带有的ActiveMQBytesMessage也可以使用
BytesMessage bytesMessage = (BytesMessage) message;
try {
byte[] bytes = new byte[(int) bytesMessage.getBodyLength()]; //得到byte[]数据流
bytesMessage.readBytes(bytes); //读取byte
String getStr = new String(bytes); //根据byte创建字符串
System.out.println("接收到请求" + getStr);
log.info("接收到请求" + getStr);
JSONObject msgJsonObj = JSONObject.parseObject(getStr);
// 处理业务
demoService.test(msgJsonObj);
} catch (JMSException e) {
log.error("收到事件,解析失败", e);
}
}
}
}