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地址调用会报错。

posted @ 2022-06-24 11:40  一条菜鸡儿  阅读(192)  评论(0)    收藏  举报