创建和启动线程

  1. 1.
  2. new Thread() {
  3. public void run() {
  4. }
  5. }.start();
  6. 2.
  7. public class MyThread extends Thread {
  8. public void run() {
  9. }
  10. }
  11. new MyThread().start();
  12. 3.
  13. new Thread(new Runnable() {
  14. public void run() {
  15. }
  16. }).start();
  17. 4.
  18. public class MyRunnable implements Runnable {
  19. public void run() {
  20. }
  21. }
  22. new Thread(new MyRunnable()).start();

实现

image.png

(1)register-server:负责接收各个服务的请求

完成以下几件事情

  • 接收监听http请求
  • 注册
  • 心跳
  • 下线

    (2)register-client:组件,依赖包

    客户端

    1. public class RegisterClient {
    2. /**
    3. * 服务实例id
    4. */
    5. private String serviceInstanceId;
    6. public RegisterClient() {
    7. this.serviceInstanceId = UUID.randomUUID().toString().replace("-","");
    8. }
    9. public void start() {
    10. //客户端启动要做两件事情
    11. //1.客户端启动的时候要开启一个线程通过HttpSender去发送注册请求。注册当前服务
    12. //2.注册成功后,开启另外一个线程去定时发送心跳
    13. new RegisterClientWorker(serviceInstanceId).start();
    14. }
    15. }

    工作线程

    1. public class RegisterClientWorker extends Thread{
    2. public static final String SERVICE_NAME="inventory-service";
    3. public static final String IP="192.168.0.108";
    4. public static final String HOSTNAME="inventory";
    5. public static final int PORT=9000;
    6. /**
    7. * http通信组件
    8. */
    9. private HttpSender httpSender;
    10. /**
    11. * 是否完成注册
    12. */
    13. private Boolean finishedRegister;
    14. /**
    15. * 服务实例id
    16. */
    17. private String serviceInstanceId;
    18. public RegisterClientWorker(String serviceInstanceId) {
    19. this.httpSender = new HttpSender();
    20. this.finishedRegister = false;
    21. this.serviceInstanceId = serviceInstanceId;
    22. }
    23. @Override
    24. public void run() {
    25. //获取当前机器的信息
    26. //ip、hostname、port
    27. if (!finishedRegister) {
    28. RegisterRequest registerRequest = new RegisterRequest();
    29. registerRequest.setServiceName(SERVICE_NAME);
    30. registerRequest.setIp(IP);
    31. registerRequest.setHostname(HOSTNAME);
    32. registerRequest.setPort(PORT);
    33. registerRequest.setServiceInstanceId(serviceInstanceId);
    34. RegisterResponse response = httpSender.register(registerRequest);
    35. System.out.println("服务注册结果为" + response.getStatus());
    36. //如果注册成功的话,注册状态就要变成true
    37. if(RegisterResponse.SUCCESS.equals(response.getStatus())) {
    38. this.finishedRegister = true;
    39. } else {
    40. return;
    41. }
    42. }
    43. if (finishedRegister) {
    44. HeartBeatRequest heartBeatRequest = new HeartBeatRequest();
    45. heartBeatRequest.setServiceInstanceId(serviceInstanceId);
    46. HeartBeatResponse heartBeatResponse = null;
    47. while (true) {
    48. heartBeatResponse = httpSender.heartBeatRegister(heartBeatRequest);
    49. System.out.println("心跳的结果为:" + heartBeatResponse.getStatus() + ".....");
    50. try {
    51. //休眠30秒执行一次心跳
    52. Thread.sleep(3000);
    53. } catch (InterruptedException e) {
    54. e.printStackTrace();
    55. }
    56. }
    57. }
    58. }
    59. }