1.微服务远程调用
- 基于RestTemplate发起的http请求实现远程调用
- 在启动类中注入Bean
/**
* 创建RestTemplate并注入spring容器
* @return
*/
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
- 依赖注入
@Autowired
private RestTemplate restTemplate;
- 使用方法
// 先定义远程访问对应的url
String url = "http://localhost:8081/user/" + order.getUserId();
// 通过调用restTemplate的方法来远程访问并获取返回值,这里的getForObject方法的返回值可以指定自己定义的POJO类,还有很多其他方法,请示情况而定
User user = restTemplate.getForObject(url, User.class);
2.Eureka注册中心
-
-
搭建EurekaServer
-
先在父目录下创建一个maven项目eureka-server
-
pom文件引入依赖
-
<dependencies> <!--eureka服务端--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> </dependencies> -
创建application.yml文件添加相关信息
-
server: port: 10086 # 服务端口 spring: application: name: eurekaserver # eureka的服务名称 eureka: client: service-url: # eureka的地址信息 defaultZone: http://127.0.0.1:10086/eureka
-
-
服务注册
-
pom文件引入依赖
-
<!--eureka客户端依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> -
修改application.yml文件添加配置信息
-
spring: application: name: userservice # order服务的服务名称 eureka: client: service-url: # eureka的地址信息 defaultZone: http://127.0.0.1:10086/eureka
-
-
服务发现
-
引入依赖
-
<!--eureka客户端依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> -
application.yml中配置eureka地址
-
spring: application: name: orderservice # order服务的服务名称 eureka: client: service-url: # eureka的地址信息 defaultZone: http://127.0.0.1:10086/eureka -
给RestTemplete添加@LoadBalanced注解
-
/** * 创建RestTemplate并注入spring容器 * @return */ @Bean @LoadBalanced public RestTemplate restTemplate() { return new RestTemplate(); } -
用服务提供者的服务名称远程调用
-
String url = "http://userservice/user/" + order.getUserId(); User user = restTemplate.getForObject(url, User.class);
-
3.测试
我们注册了两个服务端口号分别为8081和8082
当我们远程访问userservice的时候,会自动进行负载均衡
4.为什么会自动负载均衡
5.负载均衡策略