一、
1)创建一个空项目
2)创建名为eureka-server的module(作为注册中心)
3)创建服务提供者
4)消费者同理
自此项目结构创建完毕;
5)注册中心的application.yml文件配置
server:
port: 8761
eureka:
instance:
hostname: eureka-service #eureka实例名
client:
register-with-eureka: false #不把自己注册到eureka上
fetch-registry: false #不从eureka上获取服务的注册信息
service-url:
defaultZone: http://localhost:8761/eureka/
6)启动类使用 @EnableEurekaServer 启动注册中心功能
7) 服务提供者
编写接口类和contoller类
接口类:
@Service
public class TicketService {
public String getTicket(){
System.out.println("8002");
return "《超人归来》";
}
}
controller类:
@RestController
public class TicketController {
@Autowired
TicketService ticketService;
@GetMapping("/getTicket")
public String getTicket(){
return ticketService.getTicket();
}
}
紧接着服务提供者的application.yml配置
server:
port: 8001
spring:
application:
name: provider
eureka:
instance:
prefer-ip-address: true #注册服务时使用服务的ip地址
client:
service-url:
defaultZone: http://localhost:8761/eureka/
启动服务提供者的启动类
这个时候就能在注册中心看到这个服务提供者:
这个时候我们可将服务提供者服务停止,打包一下这个服务提供者,用cmd:javaj -jar XXXX命令执行多个,相当于有多个这样的提供者;
cmd启动jar
我们在注册中心就能看到,有两个服务提供者
8)消费者代码
1.消费者的application.yml文件配置
spring:
application:
name: consumer
server:
port: 8200
eureka:
instance:
prefer-ip-address: true #注册服务时使用服务的ip地址
client:
service-url:
defaultZone: http://localhost:8761/eureka/
2.启动类要使用 @EnableDiscoveryClient 注解,开启发现服务功能,并需要结合 RestTemplate 帮我们发送http请求,用@Bean放入容器,然后加上 @LoadBalanced 使用负载均衡机制
@EnableDiscoveryClient //开启发现服务功能
@SpringBootApplication
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
@LoadBalanced //使用负载均衡机制
@Bean //放入容器
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
3.controller类
@RestController
public class UserController {
@Autowired
RestTemplate restTemplate;
public String buyTicket(String name){
String s = restTemplate.getForObject("http://provider/getTicket",String.class);
return name+"购买了"+s;
}
}
http://provider/getTicket说明:
http://拼接上服务提供者的名称,再加上需要调用的服务提供者的请求名称;
这个时候我们再去eureka管理页面查看,会发现服务消费者也出现了:
然后我们再去调用消费者的bug买票方法
我们发现第一次访问是调用的8001对应的提供者,我们再访问一次
这次调用的是8002;所以这就是上方@LoadBalanced所提供的负载均衡机制,这边是轮循的方式访问这两个服务提供者。