package com.hyzm.netty;
import java.io.IOException;
import java.net.Authenticator;
import java.net.InetSocketAddress;
import java.net.PasswordAuthentication;
import java.net.ProxySelector;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
import java.util.concurrent.BlockingQueue;
import com.hyzm.netty.entity.OriginalData;
public class HttpPublisher extends PublisherBase {
/*
* 回传数据的消费者,将回传的数据发布到http服务器
*/
private BlockingQueue<Message> m_sendMsg;
private HttpClient m_client;
private String m_hostUrl = "https://postman-echo.com/post"; // 仅用于测试
private String m_user = null;
private String m_password = null;
public HttpPublisher() {
super();
m_sendMsg = Common.sentHttpMsg;
connect();
}
public HttpPublisher(String host_url) {
super();
m_hostUrl = host_url;
m_sendMsg = Common.sentHttpMsg;
connect();
}
@Override
protected void connect() {
m_client = HttpClient.newBuilder()
.version(HttpClient.Version.HTTP_2)
.connectTimeout(Duration.ofSeconds(20))
// .authenticator(new Authenticator() {
// @Override
// protected PasswordAuthentication getPasswordAuthentication() {
// return new PasswordAuthentication(m_user, m_password.toCharArray());
// }
// })
// .proxy(ProxySelector.of(new InetSocketAddress("proxy.example.com", 80)))
.build();
}
@Override
public void run() {
while (true) {
try {
Message msg = m_sendMsg.take();
// 将得到的数据发布出去
System.out.println("Http Publisher收到回传的数据: " + msg.toJSON());
OriginalData data = msg.getOriginalData();
HttpResponse<String> res = requestPost(m_hostUrl, msg.toJSON());
if (res != null && res.statusCode() == 200) { // 发送成功
data.setConfirmed(1); // 暂时设置此值表示发送成功
} else {
data.setConfirmed(-1); // 暂时设置此值表示发送失败
}
m_origDataCtrl.save(data);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
// 实现了get请求
public HttpResponse<String> requestGet(String url) {
HttpResponse<String> response = null;
try {
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI(url))
.timeout(Duration.ofSeconds(10))
.headers("Content-Type", "text/plain;charset=UTF-8")
.GET()
.build();
response = m_client.send(request, HttpResponse.BodyHandlers.ofString());
} catch (IOException ioe) {
ioe.printStackTrace();
} catch (InterruptedException ie) {
ie.printStackTrace();
} catch (URISyntaxException use) {
use.printStackTrace();
}
return response;
}
// 实现了post请求
public HttpResponse<String> requestPost(String url, String param) {
HttpResponse<String> response = null;
try {
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI(url))
.timeout(Duration.ofSeconds(10))
.header("Content-Type", "application/json;charset=UTF-8")
.POST(HttpRequest.BodyPublishers.ofString(param))
.build();
response = m_client.send(request, HttpResponse.BodyHandlers.ofString());
} catch (IOException ioe) {
ioe.printStackTrace();
} catch (InterruptedException ie) {
ie.printStackTrace();
} catch (URISyntaxException use) {
use.printStackTrace();
}
return response;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
JAVA.7z (39个子文件)
MQTT
.classpath 1KB
.settings
org.eclipse.jdt.core.prefs 913B
org.eclipse.core.resources.prefs 191B
org.eclipse.wst.common.project.facet.core.xml 121B
org.eclipse.m2e.core.prefs 90B
pom.xml 2KB
src
test
resources
java
main
resources
application.yml 426B
java
com
hyzm
netty
Common.java 2KB
Message.java 2KB
repository
OriginalDataRepository.java 304B
controller
OriginalDataController.java 488B
MqttSubscriber.java 2KB
AppStarter.java 316B
MqttPublisher.java 2KB
entity
OriginalData.java 829B
DataManager.java 1KB
MqttMsgCallback.java 2KB
MainThread.java 928B
HttpPublisher.java 4KB
PublisherBase.java 576B
target
classes
application.yml 426B
META-INF
MANIFEST.MF 156B
maven
com.hyzm
MQTT
pom.properties 207B
pom.xml 2KB
com
hyzm
netty
MqttPublisher.class 4KB
repository
OriginalDataRepository.class 450B
PublisherBase.class 920B
HttpPublisher.class 6KB
controller
OriginalDataController.class 934B
AppStarter.class 714B
MainThread.class 2KB
Message.class 4KB
entity
OriginalData.class 4KB
DataManager.class 2KB
Common.class 2KB
MqttMsgCallback.class 4KB
MqttSubscriber.class 3KB
test-classes
.project 762B
settings.xml 11KB
共 39 条
- 1
资源评论
interrupt01
- 粉丝: 2
- 资源: 27
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于SpringBoot框架和SaaS模式,立志为中小企业提供开源好用的ERP软件,目前专注进销存+财务+生产功能
- C#ASP.NET口腔门诊会员病历管理系统源码 门诊会员管理系统源码数据库 SQL2008源码类型 WebForm
- 灰狼优化算法(Grey Wolf Optimizer,GWO)是一种群智能优化算法
- 基于 promise 的网络请求库,可以运行 node.js 和浏览器中 本库基于Axios 原库v1.3.4版本进行适配
- JAVA的SpringBoot宠物医院管理系统源码数据库 MySQL源码类型 WebForm
- 基于Huawei LiteOS内核演进发展的新一代内核,Huawei LiteOS是面向IoT领域构建的轻量级物联网操作系统
- STM32Fxx英文参考手册 + Jlink下载教程
- 本仓提供了HarmonyOS NEXT开源组件市场工具,这是一个开源的插件,可以直接安装在DevEco Studio中
- 贪心算法 - 数据结构与算法
- C#ASP.NET网络进销存管理系统源码数据库 SQL2008源码类型 WebForm
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功