【Consul】ConsulClient獲取服務,註冊服務

 


import com.ecwid.consul.v1.ConsulClient;
import com.ecwid.consul.v1.Response;
import com.ecwid.consul.v1.agent.model.NewService;
import com.ecwid.consul.v1.health.model.HealthService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.List;

/**
 * @ Author:yl1794
 * @ Date:2020/6/15 10:39
 * @ Description:
 */
@Component
public class GetPhoneBookFromConsul {

    private Logger logger = LoggerFactory.getLogger(GetPhoneBookFromConsul.class);

    @Value("${spring.application.name:phonebook}")
    private String serviceName;

    @Value("${server.port:9993}")
    private int servicePort;

    @Value("${spring.cloud.consul.host:127.0.0.1}")
    private String consulIp;

    @Value("${spring.cloud.consul.port:8500}")
    private int consulPort;

    @Scheduled(cron = "0 0/5 * * * ?")
    public void exec() {
        getPhoneBookIp();
    }

    /**
     * 從consul上獲取地址簿相關信息
     *
     * @return
     */
    private void getPhoneBookIp() {
        ConsulClient consulClient = new ConsulClient(consulIp, consulPort);
        Response<List<HealthService>> response = consulClient.getHealthServices(serviceName, false, null);
        List<HealthService> healthServices = response.getValue();

        if (healthServices == null || healthServices.size() <= 0) {
            throw new RuntimeException("遠程地址簿註冊consul失敗!");
        }

        healthServices.forEach(healthService -> {
            logger.info("遠程地址簿註冊consul成功,node: {}", JSONUtil.serialize(healthService.getNode()));
            logger.info("遠程地址簿註冊consul成功,service: {}", JSONUtil.serialize(healthService.getService()));
        });
    }

    /**
     * 註冊服務
     */
    private void registerService() {
        try {
            ConsulClient client = new ConsulClient(consulIp, consulPort);
            client.agentServiceDeregister(serviceName);

            InetAddress address = InetAddress.getLocalHost();
            NewService.Check check = new NewService.Check();
            // 也可以tcp
            check.setHttp("http://" + address.getHostAddress() + ":" + servicePort + "/presence/health");
            check.setInterval("5s");
            NewService newService = new NewService();
            newService.setId(serviceName);
            newService.setName(serviceName);
            newService.setPort(servicePort);
            newService.setAddress(address.getHostAddress());
            newService.setCheck(check);
            client.agentServiceRegister(newService);
        } catch (UnknownHostException e) {
            logger.error("服務註冊失敗!", e.getMessage());
        }
    }
}

結果如下:

2020-06-15T14:45:00.034+0800 WEB INFO 18078 --- [pool-2-thread-1] c.y.p.service.GetPhoneBookFromConsul     : 遠程地址簿註冊consul成功,node: {"address":"10.200.112.43","node":"manager-master"}
2020-06-15T14:45:00.037+0800 WEB INFO 18078 --- [pool-2-thread-1] c.y.p.service.GetPhoneBookFromConsul     : 遠程地址簿註冊consul成功,service: {"address":"10.200.112.43","id":"phonebook-515842c43b29046c27c6fd077712ef29","port":9993,"service":"phonebook","tags":["environment=production","version=24.2.0.0","phonebookName=XXXXXX"]}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章