一、註冊中心是什麼
註冊中心是一個分散式系統中的關鍵組成部分,它可以統一管理服務的註冊與發現,用於解決分散式系統中服務間的相互調用問題。通過中心化管理,可以對服務的註冊和下線進行管理,同時實現負載均衡等功能。在這裡以Eureka為例,來介紹註冊中心具體是如何工作的。
@SpringBootApplication @EnableEurekaServer public class EurekaApplication { public static void main(String[] args) { SpringApplication.run(EurekaApplication.class, args); } }
如上所示,啟動一個Eureka註冊中心非常簡單,只需要引入Spring Cloud Eureka依賴,並在啟動類上添加註解@EnableEurekaServer即可。
二、服務註冊與發現
對於服務提供者,將自己服務註冊到註冊中心非常簡單。在服務啟動時,只需要向註冊中心註冊自己的服務名、實例IP地址、埠等信息即可。示例代碼如下:
@RestController @EnableEurekaClient public class DemoController { @Value("${server.port}") String port; @RequestMapping("/hello") public String home(@RequestParam String name) { return "hello " + name + ",i am from port:" + port; } }
在代碼中,通過添加@EnableEurekaClient註解,將該服務註冊到了Eureka註冊中心,同時通過@Value註解注入服務實例的埠信息。客戶端通過向註冊中心發送查詢請求,就可以獲得可用的服務實例信息。代碼如下:
@SpringBootApplication @EnableDiscoveryClient public class ConsumerApplication { public static void main(String[] args) { SpringApplication.run(ConsumerApplication.class, args); } @Bean @LoadBalanced RestTemplate restTemplate() { return new RestTemplate(); } @Autowired RestTemplate restTemplate; @RequestMapping("/callService") public String callService(@RequestParam String name) { return restTemplate.getForObject("http://service/hello?name=" + name, String.class); } }
使用RestTemplate向服務提供者發送HTTP請求時,只需要通過服務名即可獲取可用的服務,這裡的服務名就是在服務提供者向Eureka註冊中心註冊時指定的服務名。通過添加@EnableDiscoveryClient註解,就可以讓該服務具有服務發現的能力。
三、高可用性與負載均衡
為了保證高可用性,我們需要搭建多個Eureka Server,同時讓它們相互註冊到對方。當其中一台Eureka Server掛掉時,其他Eureka Server就可以接管它的職責。這裡以雙節點的集群為例,來介紹Eureka Server的高可用性配置。
server.port=8761 eureka.instance.hostname=localhost eureka.client.register-with-eureka=false eureka.client.fetch-registry=false eureka.client.service-url.defaultZone=http://localhost:8762/eureka/
在上述配置中,將當前Eureka Server註冊到了localhost:8762上,同時禁止了該實例作為服務提供者進行註冊。啟動時指定不同的配置,就可以啟動不同埠上的Eureka Server,從而搭建出一個Eureka Server集群。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/280369.html