- eureka 概述:
Eureka是Spring Cloud Netflix微服務套件中的一部分,可以與Springboot構建的微服務很容易的整合起來。
Eureka包含了服務器端和客戶端組件。服務器端,也被稱作是服務註冊中心,用於提供服務的註冊與發現。Eureka支持高可用的配置,當集羣中有分片出現故障時,Eureka就會轉入自動保護模式,它允許分片故障期間繼續提供服務的發現和註冊,當故障分片恢復正常時,集羣中其他分片會把他們的狀態再次同步回來。
客戶端組件包含服務消費者與服務生產者。在應用程序運行時,Eureka客戶端向註冊中心註冊自身提供的服務並週期性的發送心跳來更新它的服務租約。同時也可以從服務端查詢當前註冊的服務信息並把他們緩存到本地並週期性的刷新服務狀態。
- 1:服務的註冊與發現,消費者調用生產者
- a, 架構圖1:單實例模式
b,架構圖2:註冊中心單實例,服務提供者多實例
c,架構圖3:註冊中心多實例,服務提供者多實例
- 2:實現過程:
- 2.1:創建maven項目,完成eureka的服務端的創建
- 2.2:創建maven項目,完成eureka的客戶端(服務的提供者)的創建
- 2.3:創建maven項目,完成eureka的客戶端(服務的消費者)的創建
- 2.4:測試要點:
- 2.4.1,eureak服務端能被訪問到,註冊中心完成創建:
- 2.4.2,服務消費者,服務提供者 能註冊到註冊中
- 2.4.3,服務消費者通過restTemplate 完成 服務提供者的調用
- 3:服務端的實現過程:
- 3.1: maven pom文件的配置
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.bw.example</groupId> <artifactId>bw_eureka_server</artifactId> <version>0.0.1-SNAPSHOT</version> <name>bw_eureka_server</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> <spring-cloud.version>Greenwich.RC1</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> </repository> </repositories> </project>
3.2:application.properties
#服務端口 server.port=8761 #服務名稱serviceCenter eureka.instance.hostname=yihongyuan #禁止本身註冊 eureka.client.register-with-eureka=false #禁止本身註冊 eureka.client.fetch-registry=false #服務中心地址 eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/
3.3:啓動類的配置
@SpringBootApplication @EnableEurekaServer public class BwEurekaServerApplication { public static void main(String[] args) { SpringApplication.run(BwEurekaServerApplication.class, args); } }
3.3:項目啓動:測試註冊中心
3:eureka 客戶度 服務提供者實現過程:
3.1 pom文件,增加依賴
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-ribbon</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
3.2:啓動類配置
@SpringBootApplication @EnableDiscoveryClient @ComponentScan(value = "com") public class BwEurekaClientApplication { public static void main(String[] args) { SpringApplication.run(BwEurekaClientApplication.class, args); } }
3.3:業務代碼:
@Controller public class GirlController { @Value("${server.port}") private String port; @Value("${spring.application.name}") private String hostname; public GirlController(){ System.out.print("對象唄創建"); } @ResponseBody @RequestMapping(value = "/call/{id}", method = RequestMethod.GET) public Map<String,Object> call(@PathVariable Integer id) { Map<String,Object> mm = new HashMap<String,Object>(); System.out.print("翠花出臺了,臺號"+id); Girls g = new Girls(); g.setGid(id); g.setGname("翠花"); mm.put("grils",g); mm.put("port",port); mm.put("hostname",hostname); System.out.println("端口號"+port+"::服務主機"+hostname); return mm; } }
3.3:application.yml
server: port: 8762 spring: application: name: girls eureka: client: eureka-server-url: defautZone: http://localhost:8761/eureka/
3.4:啓動eureka 客戶度,服務提供者,
可以選擇啓動端口號:啓動多實例的服務端
3.5:測試客戶端 服務提供者
3.6:在註冊中心中查看客戶端的註冊情況
4.:啓動 eureak 服務型消費者:
4.1:pom文件 引入依賴:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-ribbon</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
4.2:引入配置信息application.properties
server.port=8763 spring.application.name=xiaowang eureka.client.service-url.defautZone=http://localhost:8761/eureka/
4.3:啓動類配置
@SpringBootApplication @EnableDiscoveryClient @ComponentScan(value = "com") public class BwEureakClientConsumerApplication { public static void main(String[] args) { SpringApplication.run(BwEureakClientConsumerApplication.class, args); } //創建RestTemplate對象 @LoadBalanced @Bean public RestTemplate getRestTemplate(){ return new RestTemplate(); } }
4.4:服務消費者業務代碼:
@Controller public class XWController { public XWController(){ System.out.print("小王對象唄創建"); } @Autowired RestTemplate rt; @RequestMapping(value = "/getFW/{id}") //@GetMapping("/getFw") @ResponseBody public String getFW(@PathVariable("id") int id){ System.out.print("小王叫服務,臺號"+id); //RestTemplate template = this.getRestTemplate(); Object forObject = rt.getForObject("http://girls/call/{id}/", Object.class, id); System.out.println(forObject); return forObject.toString(); } }
4.5:啓動消費者,測試
4.6:在註冊中心查看: