五步走:
module
pom
yaml
主启动
业务类
RestTemplate 提供了多种便捷访问远程HTTP服务的方法,是一种简单便捷的访问restful服务模板类是spring提供的用于访问rest服务的客户端模板工具集
Eureka:
Eureka Server提供服务注册
各个微服务节点通过配置启动后,会EuerkaServer中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务街店的信息可以在界面直观看到
EurekaClient通过注册中心进行访问
是一个Java客户端,用于简化EurekaServer的交互,客户端同时也具备一个内置的、使用轮询负载算法的负载均衡器。在应用启动后,将会向EurekaServer发送心跳。如果EurekaServer在多个心跳周期内没有接收到某个节点的心跳,将会从服务注册表中把这个服务节点移除。
Eureka Server
server: port: 7001 eureka: instance: hostname: localhost #eureka服务端的实例名称 client: #false表示不向注册中心注册自己 register-with-eureka: false #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务 fetch-registry: false service-url: #设置与EurekaServer交互的地址,查询服务和注册服务都需要依赖这个地址 defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/通过在主启动类上标注==@EnableEurekaServer表明是服务注册中心==。
EurekaClient
eureka: client: #表示是否将自己注册进EurekaServer register-with-eureka: true #是否从EurekaServer抓取已有的注册信息,默认为true。单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡 fetch-registry: true service-url: defaultZone: http://localhost:7001/eureka[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ESXW1zJi-1599206344674)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200831143635415.png)]
spring.application.name就是服务注册的名称。
互相注册,互相守望
7001端口:
server: port: 7001 eureka: instance: hostname: eureka7001.com #eureka服务端的实例名称 client: #false表示不向注册中心注册自己 register-with-eureka: false #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务 fetch-registry: false service-url: #设置与EurekaServer交互的地址,查询服务和注册服务都需要依赖这个地址 defaultZone: http://eureka7002.com:7002/eureka/7002端口:
server: port: 7002 eureka: instance: hostname: eureka7002.com #eureka服务端的实例名称 client: #false表示不向注册中心注册自己 register-with-eureka: false #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务 fetch-registry: false service-url: #设置与EurekaServer交互的地址,查询服务和注册服务都需要依赖这个地址 defaultZone: http://eureka7001.com:7001/eureka/如果有三个EurekaServer,则在defaultZone下用逗号隔开继续写
yml文件的修改
server: port: 8001 ... server: port: 8002 ...controller的修改
@RestController @Slf4j public class OrderController { // public static final String PAYMENT_URL="http://localhost:8001"; public static final String PAYMENT_URL="http://CLOUD-PAYMENT-SERVICE"; @Configuration public class ApplicationContextConfig { @Bean @LoadBalanced //该注解赋予了resttemplate负载均衡的能力 public RestTemplate getRestTemplate(){ return new RestTemplate(); } }修改主机名称与显示IP地址(在application.yml中修改Eureka相关配置)
... eureka: ... instance: instance-id: payment8001 prefer-ip-address: true ...功能:对于注册进Eureka里面的微服务,可以通过服务发现来获得该服务的信息
修改cloud-provider-payment8001的controller
public class PaymentController { ... @Resource private DiscoveryClient discoveryClient; ... @GetMapping(value = "/payment/discovery") public Object discovery(){ List<String> services = discoveryClient.getServices(); for (String service : services) { log.info("*****service"+service); } List<ServiceInstance> instances = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE"); for (ServiceInstance instance : instances) { log.info(instance.getServiceId()+"\t"+instance.getHost()+"\t"+instance.getPort()+"\t"+instance.getUri()); } return discoveryClient; }在主启动类上添加注解@EnableDiscoveryClient
instance.getServiceId()+"\t"+instance.getHost()+"\t"+instance.getPort()+"\t"+instance.getUri()); } return discoveryClient; }
在主启动类上添加注解@EnableDiscoveryClient