一、概述
就是把客户端和服务端分开一个个的,然后每一个都丢在spring boot Cloud中,要用的时候,再把他们合在一起。
二、简单使用
结构是这样的,一个eureka-server,用来做中间人,注册中心。
1、eureka-server(注册中心)
eureka是 Netflix(网飞)做的,但是是spring cloud中的一部分。
eureka-server项目只包含这个
注册中心
- 配置eureka信息
- 在主程序类前使用注解
@EnableEurekaServer
开启Eureka服务端
配置eureka信息:application.yml:
server:
port: 8761
eureka:
instance:
hostname: eureka-server #eureka实例的主机名字
client:
register-with-eureka: false #不把自己注册到eureka,因为这是个中间人
fetch-registry: false #不从eureka上获取服务的注册信息
service-url:
defaultZone: http://localhost:8761/eureka/
2、provider-ticket(服务提供者)
- 写服务层与控制层
- 配置eureka信息,把该应用加入到eureka中
1)配置eureka信息:application.yml:
server:
port: 8001
spring:
application:
name: provider-ticket
eureka:
instance:
prefer-ip-address: true #注册的时候使用服务的IP地址
client:
service-url:
defaultZone: http://localhost:8761/eureka/
就,总要有点东西输出吧,那就整两个
2)服务类
@Service
public class TicketService {
public String getTicket(){
return "《一张掉影票》";
}
}
3)控制类
@RestController
public class TicketController {
@Autowired
TicketService ticketService;
@GetMapping("/")
public String getTicket(){
return ticketService.getTicket();
}
}
在eureka-server还在启动的时候,也启动provider-ticket,就会把该应用加入到eureka中
可以看到,加入了,如果你复制多几份,改下端口,这里显示也会多几份的
3、consumer-user(消费者,客户端)
- 写配置文件
- 写控制类
- 在主程序中添加注解与方法
也是要导入
1)配置文件
server:
port: 8200
spring:
application:
name: consumer-user
eureka:
instance:
prefer-ip-address: true #注册的时候使用服务的IP地址
client:
service-url:
defaultZone: http://localhost:8761/eureka/
2)主程序类
@EnableDiscoveryClient
@SpringBootApplication
public class ConsumerUserApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerUserApplication.class, args);
}
@Bean //加入到容器中
@LoadBalanced //使用负载均衡机制
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
@EnableDiscoveryClient
:服务发现注解@LoadBalanced
使用负载均衡机制,什么是负载均衡机制?你只要知道,开了这个,能减轻内存的压力就行了RestTemplate restTemplate()
帮助我们发送http请求的东西
3)控制类
@RestController
public class UserController {
@Autowired
RestTemplate restTemplate;
@GetMapping("/buy")
public String buyTicket(String name){
String s = restTemplate.getForObject("http://provider-ticket/", String.class);
return name + "购买了"+s;
}
}
RestTemplate restTemplate
就自动注入这个咯getForObject("http://服务提供者的名字+服务提供类的控制类请求",发请求类的返回值的类型)
:利用到restTemplate,http://
是固定的,提供服务的类名是provider-ticket
,其控制类的一个请求为/
,该类返回类型为String.
4)效果
这只是个简单的应用,更复杂的还在学习中
三、热部署
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
有什么跟新后,ctrl+F9