SpringCloud(一)Eureka服務(wù)治理

Eureka 服務(wù)治理中心

  • 服務(wù)中心三大核心: 服務(wù)注冊中心,服務(wù)提供者,服務(wù)消費(fèi)者;
  • 服務(wù)提供者大多時候也是服務(wù)消費(fèi)者;
  • 服務(wù)消費(fèi)者采用Ribbon方式消費(fèi)。

注冊中心:

  • 啟動類上,@EnableEurekaServer注解使改服務(wù)成為注冊中心;
@EnableEurekaServer
@SpringBootApplication
public class ServerApplication { 
        public static void main(String[] args) {        
                SpringApplication.run(ServerApplication.class, args);   
        }
}
  • 注冊中心只需提供一個場所,不需要檢測服務(wù)以及注冊自己(在Eureka中這兩點(diǎn)是默認(rèn)true的);
eureka.client.register-with-eureka=false
eureka.client.fetch-register=false
  • 配置application.properties文件中引入:
#服務(wù)注冊中心
server.port=2222
#eureka
eureka.instance.hostname=localhost
# 關(guān)閉向服務(wù)中心注冊自己
eureka.client.register-with-eureka=false
# 關(guān)閉獲取服務(wù)
eureka.client.fetch-registry=false
eureka.client.serviceUrl.defaultZone = http://${eureka.instance.hostname}:${server.port}/eureka/
# 關(guān)閉自我保護(hù)機(jī)制
eureka.server.enable-self-preservation=false
  • 至此Eureka服務(wù)端完成,啟動訪問http://localhost:2222可看到此頁面,此時沒有服務(wù)提供者,就沒有實(shí)例服務(wù)的狀態(tài);
    啟動后的服務(wù)端

服務(wù)提供者

  • 服務(wù)提供者需要提供服務(wù)注冊到注冊中心中,同時也能檢索到其他服務(wù);在配置文件中配置相對簡單;只需要對服務(wù)進(jìn)行命名以及告訴提供者注冊中心地址即可;如果要用ip的形式,需要加入配置參數(shù)eureka.instance.prefer-ip-address=true,
  • 加入eureka.instance.lease-renewal-interval-in-seconds=30目的是為了向注冊中心提供一個心跳,來告訴注冊中心服務(wù)還“活著”,從而不剔除起服務(wù)實(shí)例,參數(shù)默認(rèn)值為30;
  • eureka.instance.lease-expiration-duration-in-seconds=90,作用是在服務(wù)無反應(yīng)90s后,注冊中心剔除服務(wù),此參數(shù)默認(rèn)值為90;
  • 配置application.properties文件中引入:
server.port=8090
#服務(wù)名
spring.application.name=hello-service
#服務(wù)中心地址
eureka.client.serviceUrl.defaultZone=http://localhost:2222/eureka/
#服務(wù)續(xù)約
#服務(wù)續(xù)約任務(wù)的調(diào)用時間間隔
eureka.instance.lease-renewal-interval-in-seconds=30
#服務(wù)失效時間(90s無響應(yīng)則剔除服務(wù))
eureka.instance.lease-expiration-duration-in-seconds=90

  • 啟動類上加上注解@EnableDiscoveryClient,使其能夠被發(fā)現(xiàn);
@EnableDiscoveryClient
@SpringBootApplication
public class ProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProviderApplication.class, args);
    }
}
  • 新建一個controller提供給消費(fèi)者訪問:
@RestController
@RequestMapping("/access")
public class AccessController {
    private static final Logger logger = LoggerFactory.getLogger(AccessController.class);

    @Autowired
    private DiscoveryClient client;

    @RequestMapping("/hello")
    public String index(){

        ServiceInstance instance = client.getLocalServiceInstance();

        logger.info("hello, host:+"+instance.getHost() + ", service_id:"+ instance.getServiceId());

        return "Hello world";
    }
}
  • 啟動程序訪問注冊中心http://localhost:2222/eureka即可看到該實(shí)例的信息:
    注冊中心服務(wù)實(shí)例

服務(wù)消費(fèi)者

  • 服務(wù)提供者大多數(shù)也是服務(wù)消費(fèi)者,在配置上與提供者一致;
  • 服務(wù)消費(fèi)者采用Ribbon的方式消費(fèi)服務(wù),Ribbon是一種客戶端負(fù)載均衡器;
  • 配置application.properties文件中引入:
#服務(wù)消費(fèi)者
server.port=9000
#服務(wù)名
spring.application.name=consumer-service
#服務(wù)中心地址
eureka.client.serviceUrl.defaultZone=http://localhost:2222/eureka/
#服務(wù)續(xù)約
#服務(wù)續(xù)約任務(wù)的調(diào)用時間間隔
eureka.instance.lease-renewal-interval-in-seconds=30
#服務(wù)失效時間(90s無響應(yīng)則剔除服務(wù))
eureka.instance.lease-expiration-duration-in-seconds=90
  • 在啟動類上加上一個@LoadBalance注解,以及注入@Bean,采用RestTemplate來調(diào)用;
@EnableDiscoveryClient
@SpringBootApplication
public class ConsumerApplication {

    @Bean
    @LoadBalanced
    RestTemplate restTemplate(){
        return new RestTemplate();
    }

    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class, args);
    }

}
  • 在消費(fèi)者中新建一個controller來對提供者的接口進(jìn)行調(diào)用;
@RestController
@RequestMapping(value = "/consumer")
public class ConsumerController {

    @Autowired
    RestTemplate restTemplate;


    @RequestMapping(value = "/robbin")
    public String helloConsumer(){
        return restTemplate.getForEntity("http://HELLO-SERVICE/access/hello",String.class).getBody();
    }
}
  • 服務(wù)治理的重點(diǎn)就是服務(wù),所以調(diào)用是直接用的是HELLO-SERVICE服務(wù)進(jìn)行調(diào)用;訪問消費(fèi)者的接口,在提供者的日志中看得到如下圖:
    服務(wù)提供者日志
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容