SpringCloud之eureka
idea 创建一个eureka-service 注册中心

勾选上 Eureka Server 和 lombok

修改application.yml配置
server:
port: 8001 #指定运行端口
spring:
application:
name: eureka-server #指定服务名称
eureka:
instance:
hostname: localhost #指定主机地址
client:
fetch-registry: false #指定是否要从注册中心获取服务(注册中心不需要开启)
register-with-eureka: false #指定是否要注册到注册中心(注册中心不需要开启)
server:
enable-self-preservation: false #关闭保护模式

启动类加上 @EnableEurekaServer 注解
@EnableEurekaServer
idea 创建一个user-service 客户端,注册到 eureka-service
勾选上 Eureka Discovery Client 和 lombok

修改application.yml
server:
port: 8201 #指定运行端口
spring:
application:
name: user-service #指定服务名称
eureka:
client:
register-with-eureka: true #注册到Eureka的注册中心
fetch-registry: true #获取注册实例列表
service-url:
defaultZone: http://localhost:8001/eureka/ #配置注册中心地址

在启动类上 加上 @EnableEurekaClient 注解
@EnableEurekaClient
创建一个User 实体类
@Data
public class User {
private int id;
private String username;
private String password;
}

创建 UserController 类提供一个get 一个post 被其他模块调用的方法
@RestController
@RequestMapping("/user")
public class UserController {
@PostMapping("/create")
public User create(@RequestBody User user){
System.out.println("create");
if(user.getUsername()!=null){
return user;
}
return new User();
}
@GetMapping("/getByUsername")
public User getByUsername(@RequestParam String username){
User user =new User();
if (username!=null){
user.setUsername(username);
return user;
}
return new User();
}
}

启动两个模块访问 http://localhost:8001/
在创建 ribbon-service 模块
勾选上 Eureka Discovery Client 和 lombok

修改application.yml
server:
port: 8301
spring:
application:
name: ribbon-service
eureka:
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://localhost:8001/eureka/
server-url:
user-service: http://user-service
ribbon:
ConnectTimeout: 1000 #服务请求连接超时时间(毫秒)
ReadTimeout: 3000 #服务请求处理超时时间(毫秒)
OkToRetryOnAllOperations: true #对超时请求启用重试机制
MaxAutoRetriesNextServer: 1 #切换重试实例的最大个数
MaxAutoRetries: 1 # 切换实例后重试最大次数
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule #修改负载均衡算法

在启动类加上 @EnableDiscoveryClient 注解
@EnableDiscoveryClient
加上 RibbonConfig 类 加入restTemplate来消费相关的服务。
@Configuration
public class RibbonConfig {
@Bean
//@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
}

创建controller层,消费远程服务

访问get方法 localhost:8301/user/getByUsername?username=姓名

访问post方法 localhost:8301/user/create

上述是通过ip地址直接调用,
如果需要通过服务名称调用 需要修改 RibbonConfig 类为
@Configuration
public class RibbonConfig {
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
controller层改为
@RestController
@RequestMapping("/user")
public class UserRibbonController {
@Autowired
private RestTemplate restTemplate;
@Value("${server-url.user-service}")
private String userServiceUrl;
@GetMapping("/getByUsername")
public User getByusername(String username){
return restTemplate.getForObject(userServiceUrl+"/user/getByUsername?username="+username,User.class);
}
@PostMapping("/create")
public User create(@RequestBody User user) {
System.out.println("User:"+user.getUsername());
return restTemplate.postForObject(userServiceUrl + "/user/create", user, User.class);
// return restTemplate.postForObject("http://localhost:8201" + "/user/create", user, User.class);
}
}

如果使用了 配置 @LoadBalanced 注解 controller层通过ip地址调用会报错。
浙公网安备 33010602011771号