创建和启动线程
1.
new Thread() {
public void run() {
}
}.start();
2.
public class MyThread extends Thread {
public void run() {
}
}
new MyThread().start();
3.
new Thread(new Runnable() {
public void run() {
}
}).start();
4.
public class MyRunnable implements Runnable {
public void run() {
}
}
new Thread(new MyRunnable()).start();
实现
(1)register-server:负责接收各个服务的请求
完成以下几件事情
- 接收监听http请求
- 注册
- 心跳
-
(2)register-client:组件,依赖包
客户端
public class RegisterClient {
/**
* 服务实例id
*/
private String serviceInstanceId;
public RegisterClient() {
this.serviceInstanceId = UUID.randomUUID().toString().replace("-","");
}
public void start() {
//客户端启动要做两件事情
//1.客户端启动的时候要开启一个线程通过HttpSender去发送注册请求。注册当前服务
//2.注册成功后,开启另外一个线程去定时发送心跳
new RegisterClientWorker(serviceInstanceId).start();
}
}
工作线程
public class RegisterClientWorker extends Thread{
public static final String SERVICE_NAME="inventory-service";
public static final String IP="192.168.0.108";
public static final String HOSTNAME="inventory";
public static final int PORT=9000;
/**
* http通信组件
*/
private HttpSender httpSender;
/**
* 是否完成注册
*/
private Boolean finishedRegister;
/**
* 服务实例id
*/
private String serviceInstanceId;
public RegisterClientWorker(String serviceInstanceId) {
this.httpSender = new HttpSender();
this.finishedRegister = false;
this.serviceInstanceId = serviceInstanceId;
}
@Override
public void run() {
//获取当前机器的信息
//ip、hostname、port
if (!finishedRegister) {
RegisterRequest registerRequest = new RegisterRequest();
registerRequest.setServiceName(SERVICE_NAME);
registerRequest.setIp(IP);
registerRequest.setHostname(HOSTNAME);
registerRequest.setPort(PORT);
registerRequest.setServiceInstanceId(serviceInstanceId);
RegisterResponse response = httpSender.register(registerRequest);
System.out.println("服务注册结果为" + response.getStatus());
//如果注册成功的话,注册状态就要变成true
if(RegisterResponse.SUCCESS.equals(response.getStatus())) {
this.finishedRegister = true;
} else {
return;
}
}
if (finishedRegister) {
HeartBeatRequest heartBeatRequest = new HeartBeatRequest();
heartBeatRequest.setServiceInstanceId(serviceInstanceId);
HeartBeatResponse heartBeatResponse = null;
while (true) {
heartBeatResponse = httpSender.heartBeatRegister(heartBeatRequest);
System.out.println("心跳的结果为:" + heartBeatResponse.getStatus() + ".....");
try {
//休眠30秒执行一次心跳
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}