什么是服务治理
在传统rpc远程调用中,服务与服务依赖关系,管理比较复杂,所以需要使用服务治理,管理服务与服务之间依赖关系,可以实现服务调用、负载均衡、容错等,实现服务发现与注册。-
服务注册与发现
在服务注册与发现中,有一个注册中心,当服务器启动的时候,会把当前自己服务器的信息 比如 服务地址通讯地址等以别名方式注册到注册中心上。
另一方(消费者|服务提供者),以该别名的方式去注册中心上获取到实际的服务通讯地址,让后在实现本地rpc调用远程。
-
注册中心环境搭建
3.1 注册中心环境搭建
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
###服务端口号
server:
port: 8100
###eureka 基本信息配置
eureka:
instance:
###注册到eurekaip地址
hostname: 127.0.0.1
client:
serviceUrl:
defaultZone: http://{server.port}/eureka/
###因为自己是为注册中心,不需要自己注册自己
register-with-eureka: false
###因为自己是为注册中心,不需要检索服务
fetch-registry: false
3.1.3 启动Eureka服务
@EnableEurekaServer
@SpringBootApplication
public class AppEureka {
public static void main(String[] args) {
SpringApplication.run(AppEureka.class, args);
}
}
3.2 注册服务提供者
项目案例:实现会员服务(提供者)springcloud-2.0-member调用订单服务(消费者)springcloud-2.0-order
3.2.1 服务提供者 会员服务
application.yml服务启动端口号
server:
port: 8000
服务名称(服务注册到eureka名称)
spring:
application:
name: yangshaojun-member-app
服务注册到eureka地址
eureka:
client:
service-url:
defaultZone: http://localhost:8100/eureka
因为该应用为注册中心,不会注册自己
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 服务消费者订单服务
服务启动端口号
server:
port: 8001
服务名称(服务注册到eureka名称)
spring:
application:
name: yangshaojun-order-app
服务注册到eureka地址
eureka:
client:
service-url:
defaultZone: http://localhost:8100/eureka
因为该应用为注册中心,不会注册自己
register-with-eureka: true
是否需要从eureka上获取注册信息
fetch-registry: true
@RestController
public class OrderController {
@Autowired
private RestTemplate restTemplate;
@RequestMapping("/getorder")
public String getOrder() {
// order 使用rpc 远程调用技术 调用 会员服务
String memberUrl = "http://yangshaojun-member-app/getMember";
String result = restTemplate.getForObject(memberUrl, String.class);
System.out.println("会员服务调用订单服务,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个应用,在配置中互相注册自己。
4.2 服务提供者和消费者分别将自己注册到2个注册中心。