emqtt java_java实现emqtt的消息发布

该博客展示了如何使用Java代码实现通过EMQTT发送消息。主要利用HttpClient库进行HTTP POST请求,设置Basic Auth认证头,并将消息参数如qos、retain、topic和message传递到指定的EMQTT服务器URL。
摘要由CSDN通过智能技术生成

package com.hthl.xxtd.sdk.push.emqtt;

import javax.resource.spi.CommException;

import org.apache.commons.codec.binary.Base64;

import org.apache.commons.httpclient.Header;

import org.apache.commons.httpclient.HttpClient;

import org.apache.commons.httpclient.HttpStatus;

import org.apache.commons.httpclient.NameValuePair;

import org.apache.commons.httpclient.methods.PostMethod;

import org.apache.log4j.Logger;

import com.hthl.xxtd.util.DateUtil;

/**

* EMQ客户端工具

* */

public class EmqHttpUtil {

private static final Logger logger = Logger.getLogger(EmqHttpUtil.class);

public static void main(String[] args) throws Exception {

NameValuePair[] data={

new NameValuePair("qos", "1"),

new NameValuePair("retain", "0"),

new NameValuePair("topic", "hthl/hyt"),

new NameValuePair("message", "大吉大利,今晚吃鸡:"+DateUtil.getTimes())

};

System.out.println(httpPost("http://192.168.20.38:6060/mqtt/publish", data, "UTF-8",getHeader()));

}

/** * 构造Basic Auth认证头信息

* @throws Exception */

private static String getHeader() throws Exception {

String auth = "hthl_sub" + ":" + "123456";

byte[] encodedAuth=Base64.encodeBase64(auth.getBytes("UTF-8"));

String authHeader = "Basic " +new String(encodedAuth);

return authHeader;

}

/**

* HTTP/HTTPS POST

* @param url 接口地址

* @param data 请求数据

* @param encoding 编码方式

* @return String

* @throws CommException

*/

public static String httpPost(String url, NameValuePair[] data,String encoding,String authHeader)throws Exception {

HttpClient httpClient = new HttpClient();

PostMethod postMethod = new PostMethod(url);

// 设置编码,http post同时会用编码进行url.encode

httpClient.getParams().setContentCharset(encoding);

postMethod.addRequestHeader("Content-Type","application/x-www-form-urlencoded;charset="+encoding);

postMethod.addRequestHeader("Authorization", authHeader);

// 将表单的值放入postMethod中

postMethod.setRequestBody(data);

// 执行postMethod

int statusCode =httpClient.executeMethod(postMethod);

logger.info("Response status code: " + statusCode);//返回200为成功

// HttpClient对于要求接受后继服务的请求,POST和PUT等不能自动处理转发

// 301或者302

if (statusCode == HttpStatus.SC_MOVED_PERMANENTLY|| statusCode == HttpStatus.SC_MOVED_TEMPORARILY) {

// 从头中取出转向的地址

Header locationHeader = postMethod.getResponseHeader("location");

String location = null;

if (locationHeader != null) {

location = locationHeader.getValue();

logger.error("The page was redirected to:" + location);

} else {

logger.error("Location field value is null.");

}

return null;

} else {

return postMethod.getResponseBodyAsString();

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值