我这为了方便测试,只是创建了一个空的项目,然后再分别创建3个模块

创建注册中心模块

使用spring的初始化向导

 
由于要做注册中心,所以我们选择Eureka Server模块

接下下来再创建服务提供者和服务消费者模块
创建模块步骤都是一样,唯独服务提供者和服务消费者创建时选择的模块是Eureka Discovery Client,而不是Eureka Server,另外加一个Web模块

创建后的三个模块

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/     #自己指定注册中心服务的地址
注册中心默认的服务地址
 
/** * 注册中心 * 1、配置Euraka信息 * 2、@EnableEurekaServer */ @EnableEurekaServer @SpringBootApplication public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); } }
启动服务之后控制台有打印


说明注册中心配置成功

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(); } }
server: port: 8001 spring: application: name: provide-ticket eureka: instance: prefer-ip-address: true #注册的时候使用服务的ip地址 client: service-url: defaultZone: http://localhost:8761/eureka/ #指定注册中心服务的地址
服务的地址要和我们创建的注册中心的地址想对应
注意:我们的注册中心必须是一直启动着,这样才能注册进去
启动着注册中心(eureka-server模块),然后启动服务提供者(provide-ticket模块)后;
可以在注册中心页面中看到我们注册成功的服务

spring:
  application:
    name: consumer-user
server:
  port: 8200
eureka:
  instance:
    prefer-ip-address: true     #注册的时候使用服务的ip地址
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/     #指定注册中心服务的地址
@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:使用负载均衡机制稍后再说明
@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):

第二个参数:返回值类型
注意注册中心服务和服务提供者需要是开启状态才能调用成功
启动服务,链接访问

远程调用服务成功
即注册中心有两个或多个相同的服务时,比如这里有两个PROVIDER-TICKET服务注册了;启动了负载均衡机制时,那么服务消费者远程调用这个PROVIDER-TICKET服务时,
是轮回着调用的;以达到负载均衡。

38、springboot——分布式之SpringCloud
原文:https://www.cnblogs.com/lyh233/p/12716128.html