38springboot——分布式之SpringCloud
Posted Arbitrary233
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了38springboot——分布式之SpringCloud相关的知识,希望对你有一定的参考价值。
一、Spring Cloud简介
二、测试springcloud
一、创建3个项目分别作为注册中心,服务提供者,服务消费者
我这为了方便测试,只是创建了一个空的项目,然后再分别创建3个模块
1、新建空项目
2、分别创建三个模块
创建注册中心模块
使用spring的初始化向导
由于要做注册中心,所以我们选择Eureka Server模块
接下下来再创建服务提供者和服务消费者模块
创建模块步骤都是一样,唯独服务提供者和服务消费者创建时选择的模块是Eureka Discovery Client,而不是Eureka Server,另外加一个Web模块
创建后的三个模块
二、在注册中心(eureka-server模块)中配置eureka信息
1、我这里用的是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、在启动器类中加@EnableEurekaServer注解启动Eureka注册中心的功能
/** * 注册中心 * 1、配置Euraka信息 * 2、@EnableEurekaServer */ @EnableEurekaServer @SpringBootApplication public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); } }
三、启动注册中心(eureka-server模块)服务查看效果
启动服务之后控制台有打印
说明注册中心配置成功
三、服务提供者(provide-ticket模块)提供服务
1、创建service和controller
TicketService代码
import org.springframework.stereotype.Service; @Service public class TicketService { public String getTicket(){ return "《我和我的祖国》"; } }
TicketController代码
@RestController public class TicketController { @Autowired TicketService ticketService; @GetMapping("/ticket") public String getTicket(){ return ticketService.getTicket(); } }
2、在application.yml中配置注册信息
server: port: 8001 spring: application: name: provide-ticket eureka: instance: prefer-ip-address: true #注册的时候使用服务的ip地址 client: service-url: defaultZone: http://localhost:8761/eureka/ #指定注册中心服务的地址
服务的地址要和我们创建的注册中心的地址想对应
3、启动项目,项目服务将会注册到注册中心里
注意:我们的注册中心必须是一直启动着,这样才能注册进去
启动着注册中心(eureka-server模块),然后启动服务提供者(provide-ticket模块)后;
可以在注册中心页面中看到我们注册成功的服务
四、服务消费者(consumer-user模块)调用服务
1、consumer-user的application.yml中进行相关配置
spring:
application:
name: consumer-user
server:
port: 8200
eureka:
instance:
prefer-ip-address: true #注册的时候使用服务的ip地址
client:
service-url:
defaultZone: http://localhost:8761/eureka/ #指定注册中心服务的地址
2、在启动器类中把RestTemplate注入容器并开启发现服务的注解
@EnableDiscoveryClient //开启发现服务功能 @SpringBootApplication public class ConsumerUserApplication { public static void main(String[] args) { SpringApplication.run(ConsumerUserApplication.class, args); } @LoadBalanced //使用负载均衡机制 @Bean public RestTemplate restTemplate(){ return new RestTemplate(); } }
通过RestTemplate进行访问远程服务
@LoadBalanced:使用负载均衡机制稍后再说明
3、编写一个controller进行调用远程服务
@RestController public class UserController { @Autowired RestTemplate restTemplate; @GetMapping("/buy") public String buyTicket(String name){ String s = restTemplate.getForObject("http://PROVIDE-TICKET/ticket", String.class); return name+"购买了"+s; } }
restTemplate.getForObject("http://PROVIDE-TICKET/ticket", String.class)
第一个参数是http://服务名/服务地址
服务地址(服务模块里的controller):
第二个参数:返回值类型
4、测试
注意注册中心服务和服务提供者需要是开启状态才能调用成功
启动服务,链接访问
远程调用服务成功
五、说明之前的负载均衡机制@LoadBalanced
即注册中心有两个或多个相同的服务时,比如这里有两个PROVIDER-TICKET服务注册了;启动了负载均衡机制时,那么服务消费者远程调用这个PROVIDER-TICKET服务时,
是轮回着调用的;以达到负载均衡。
以上是关于38springboot——分布式之SpringCloud的主要内容,如果未能解决你的问题,请参考以下文章
springcloud:配置中心和消息总线(配置中心终结版)