@[TOC](Mule MQTT节点使用(Anypoint studio))
MQTT介绍
MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。
其他MQTT的相关特点这里就不再赘述了,网上都有。
工程架构
在项目中,我是以rabbitMQ通过添加MQTT服务的方式作为MQTT服务端;客户端工具是用的MQTT.fx;mule MQTT也是作为客户端
下面我就分三部分(MQTT服务端,MQTT.fx,mule MQTT)来介绍一下各个部分相应配置
MQTT服务端
可以参照https://jingyan.baidu.com/article/e4d08ffd9ec61c0fd2f60d1f.html这个链接基于RabbitMQ安装MQTT插件
安装完成之后可以在浏览器上打开http://localhost:15672来查看RabbitMQ的管理界面,MQTT服务端是否连接上来也可以在该面板的Queues目录下查看到。
MQTT.fx
这里我是使用的MQTT.fx客户端,你也可以使用其他的,MQTT.fx的下载以及安装就不再介绍了,直接上相关配置参数图:
打开该软件主界面的设置:
注意图中的圈出的参数,如果在安装mqtt插件的时候没有修改相应端口就可以不用改默认的参数。
点击connect,如果右边出现绿点则表示已经链接到MQTT服务端了
输入主题名称,可以随便输入,然后点击Subscribe
此时就可以在RabbitMQ管理平台看到相应的信息
接下来可以在MQTT.fx客户端验证一下MQTT服务器是否正常运行,点击publish,在下半部的文本框输入任何信息,需要注意的是主题设置要与之前的subscribe的主题要一致,然后点击publish就可以在subscribe界面看到接受的消息
mule MQTT
mule MQTT客户端也可以分为两种情况,一种是作为发送方,另一种是作为接收方
作为发送方
我的项目整体节点组件如下:
HTTP组件配置:
MQTT组件配置:(注意主题要与MQTT.fx订阅的主题一致)
另外两个Java组件是对数据进行处理,代码分别如下
package mqtt_test;
import org.mule.api.MuleMessage;
import org.mule.api.transformer.TransformerException;
import org.mule.transformer.AbstractMessageTransformer;
public class mqttTrans extends AbstractMessageTransformer{
@Override
public Object transformMessage(MuleMessage message, String outputEncoding) throws TransformerException {
String msg = "";
try {
msg=message.getPayloadAsString();
System.out.println("message.getPayloadAsString()=================="+msg);
return msg;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
package mqtt_test;
import org.mule.api.MuleMessage;
import org.mule.api.transformer.TransformerException;
import org.mule.transformer.AbstractMessageTransformer;
public class mqttReturnTrans extends AbstractMessageTransformer{
@Override
public Object transformMessage(MuleMessage message, String outputEncoding) throws TransformerException {
String returnMsg = "";
try {
returnMsg = message.getPayloadAsString();
System.out.println("returnMsg=================="+returnMsg);
if(null != returnMsg){
return "{'status':'ok'}";
}
return "{'status':'fail'}";
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
最后运行项目,然后通过SOAPUI测试:
然后可以在MQTT.fx客户端接收到信息:
作为接收方
我的项目整体节点组件如下:
MQTT组件配置:(注意主题要与MQTT.fx订阅的主题一致)
Java组件代码:
package mqtt_subscribe;
import org.mule.api.MuleMessage;
import org.mule.api.transformer.TransformerException;
import org.mule.transformer.AbstractMessageTransformer;
public class subscribeTrans extends AbstractMessageTransformer{
@Override
public Object transformMessage(MuleMessage message, String outputEncoding) throws TransformerException {
String msg = "";
try {
msg = message.getPayloadAsString();
System.out.println("returnMsg=================="+msg);
return msg;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "{'status':'failed'}";
}
}
最后两个组件可以根据自己需要设置相应输出
可以在rabbitMQ管理平台看到多了一个连接
最后的运行效果如下:
在MQTT.fx客户端Publish界面输入要发送的内容,点击发送可以在mule客户端看到接受到的信息
在mule工具的Console面板下可以看到:
至此,mule MQTT组件的基本使用就介绍到这里,后续有什么新的发现与应用再会!