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ù)進(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ù)消費(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)者的接口,在提供者的日志中看得到如下圖:
最后編輯于 :
?著作權(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ù)。