什么是服務(wù)治理
在傳統(tǒng)rpc遠(yuǎn)程調(diào)用中捧弃,服務(wù)與服務(wù)依賴關(guān)系,管理比較復(fù)雜,所以需要使用服務(wù)治理违霞,管理服務(wù)與服務(wù)之間依賴關(guān)系嘴办,可以實現(xiàn)服務(wù)調(diào)用、負(fù)載均衡买鸽、容錯等涧郊,實現(xiàn)服務(wù)發(fā)現(xiàn)與注冊。-
服務(wù)注冊與發(fā)現(xiàn)
在服務(wù)注冊與發(fā)現(xiàn)中眼五,有一個注冊中心妆艘,當(dāng)服務(wù)器啟動的時候,會把當(dāng)前自己服務(wù)器的信息 比如 服務(wù)地址通訊地址等以別名方式注冊到注冊中心上看幼。
另一方(消費者|服務(wù)提供者)双仍,以該別名的方式去注冊中心上獲取到實際的服務(wù)通訊地址,讓后在實現(xiàn)本地rpc調(diào)用遠(yuǎn)程桌吃。
rpc核心.png
服務(wù)注冊與發(fā)現(xiàn)原理.png
負(fù)載均衡.png
注冊中心原理.png -
注冊中心環(huán)境搭建
3.1 注冊中心環(huán)境搭建
3.1.1 Maven依賴信息 pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.M7</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/libs-milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
3.1.2 application.yml
###服務(wù)端口號
server:
port: 8100
###eureka 基本信息配置
eureka:
instance:
###注冊到eurekaip地址
hostname: 127.0.0.1
client:
serviceUrl:
defaultZone: http://{server.port}/eureka/
###因為自己是為注冊中心朱沃,不需要自己注冊自己
register-with-eureka: false
###因為自己是為注冊中心,不需要檢索服務(wù)
fetch-registry: false
3.1.3 啟動Eureka服務(wù)
@EnableEurekaServer
@SpringBootApplication
public class AppEureka {
public static void main(String[] args) {
SpringApplication.run(AppEureka.class, args);
}
}
3.2 注冊服務(wù)提供者
項目案例:實現(xiàn)會員服務(wù)(提供者)springcloud-2.0-member調(diào)用訂單服務(wù)(消費者)springcloud-2.0-order
3.2.1 服務(wù)提供者 會員服務(wù)
application.yml服務(wù)啟動端口號
server:
port: 8000
服務(wù)名稱(服務(wù)注冊到eureka名稱)
spring:
application:
name: yangshaojun-member-app
服務(wù)注冊到eureka地址
eureka:
client:
service-url:
defaultZone: http://localhost:8100/eureka
因為該應(yīng)用為注冊中心茅诱,不會注冊自己
register-with-eureka: true
是否需要從eureka上獲取注冊信息
fetch-registry: true
@RestController
public class MemberController {
@RequestMapping("/getMember")
public String getMember() {
return "this is getMember";
}
}
@SpringBootApplication
@EnableEurekaClient
public class AppMember {
public static void main(String[] args) {
SpringApplication.run(AppMember.class, args);
}
}
3.2.2 服務(wù)消費者訂單服務(wù)
服務(wù)啟動端口號
server:
port: 8001
服務(wù)名稱(服務(wù)注冊到eureka名稱)
spring:
application:
name: yangshaojun-order-app
服務(wù)注冊到eureka地址
eureka:
client:
service-url:
defaultZone: http://localhost:8100/eureka
因為該應(yīng)用為注冊中心逗物,不會注冊自己
register-with-eureka: true
是否需要從eureka上獲取注冊信息
fetch-registry: true
@RestController
public class OrderController {
@Autowired
private RestTemplate restTemplate;
@RequestMapping("/getorder")
public String getOrder() {
// order 使用rpc 遠(yuǎn)程調(diào)用技術(shù) 調(diào)用 會員服務(wù)
String memberUrl = "http://yangshaojun-member-app/getMember";
String result = restTemplate.getForObject(memberUrl, String.class);
System.out.println("會員服務(wù)調(diào)用訂單服務(wù),result:" + result);
return result;
}
}
@SpringBootApplication
@EnableEurekaClient
public class AppOrder {
public static void main(String[] args) {
SpringApplication.run(AppOrder.class, args);
}
@Bean
@LoadBalanced
RestTemplate restTemplate() {
return new RestTemplate();
}
}
- 注冊中心集群搭建
4.1 Eureka注冊中心2個應(yīng)用,在配置中互相注冊自己瑟俭。
4.2 服務(wù)提供者和消費者分別將自己注冊到2個注冊中心翎卓。