五大神兽(组件):
服务注册发现(注册中心)——Netflix Eureka : 帮我们管理服务的通信地址(ip,端口)
客户端负载均衡——Netflix Ribbon\Open Feign : 解决服务负载均衡调用的
断路器——Netflix Hystrix :解决微服务故障的,保护微服务的
服务网关——Netflix Zuul :统一访问入口,微服务的大门(安保部门)
分布式配置——Spring Cloud Config :统一管理微服务的配置
先搭建根项目
<!-- 让项目成为一个 SpringBoot的项目-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring.cloud.version>Hoxton.SR3</spring.cloud.version>
</properties>
<!--依赖管理 springcloud的版本-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!--依赖-->
<dependencies>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.8</version>
</dependency>
</dependencies>
springboot和springcloud包对应版本
搭建服务提供者 order-common和order-service 导包
和服务消费者 user-common和user-service
<!--springboot支持-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
yml:
server:
port: 2010
spring:
application:
name: order-service#不要使用下划线
配置类来一个:
@Configuration // <beans></beans>
public class BeanConfig {
@Bean //<bean class="org.springframework.web.client.RestTemplate"></bean>
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
@RestController
@RequestMapping("/consumer")
public class UserController {
//多个方法调用只需改一处就ok
public static final String URL_PREFIX = "http://localhost:8001";
@Autowired
private RestTemplate restTemplate;
@RequestMapping("/user/{id}")
public User getUser(@PathVariable("id")Long id){
//调用远程服务 http请求
String url = URL_PREFIX+"/provider/user/"+id;
return restTemplate.getForObject(URL_PREFIX,User.class );
}
}
一个简单的远程调用就搞好了。