创建和启动线程
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;}@Overridepublic void run() {//获取当前机器的信息//ip、hostname、portif (!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());//如果注册成功的话,注册状态就要变成trueif(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();}}}}}
