- 修改映射配置
找到C:\Windows\System32\drivers\etc路径下的hosts文件,打开并添加映射配置添加进hosts文件.
修改完成后,刷新DNS缓存
- 写YML
以下是Eureka7001的yaml文件,Eureka7002,7003类似,只不过port和url需要做点修改.
server: port: 7001 eureka: instance: hostname: eureka7001.com #eureka服务端的实例名称 client: register-with-eureka: false #false表示不向注册中心注册自己。 fetch-registry: false #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务 service-url: defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7004.com:7004/eureka/
- 主启动
省略…
- 启动Eureka7001,7002,7004进行 测试
2.3.3 将支付服务8001微服务发布到上面3台Eureka集群配置中
server: port: 8001 spring: application: name: cloud-payment-service datasource: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/db2021?useUnicode=true&characterEncoding=utf-8&useSSL=false username: root password: 186259 eureka: client: #表示是否将自己注册进EurekaServer默认为true。 register-with-eureka: true #是否从EurekaServer抓取已有的注册信息,默认为true。单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡 fetchRegistry: true service-url: # defaultZone: http://localhost:7001/eureka defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka,http://eureka7004.com:7004/eureka # 集群版 mybatis: mapperLocations: classpath:mapper/*.xml # 配置Mapper所有接口配置文件的位置. type-aliases-package: com.rg.springcloud.pojo # 所有Entity别名类所在包
2.3.4 将订单服务80微服务发布到上面3台Eureka集群配置中
server: port: 80 spring: application: name: cloud-order-service eureka: client: #表示是否将自己注册进EurekaServer默认为true。 register-with-eureka: true #是否从EurekaServer抓取已有的注册信息,默认为true。单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡 fetchRegistry: true service-url: #defaultZone: http://localhost:7001/eureka defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka,http://eureka7004.com:7004/eureka # 集群版
2.3.5 测试01
1.先要启动EurekaServer,7001/7002服务
2.再要启动服务提供者provider,8001
3.再要启动消费者,80
测试结果:
访问: http://localhost/consumer/payment/get/1
2.3.6 支付服务提供者8001集群环境构建
建Module
参考cloud-provider-payment8001,建立cloud-provider-payment8002
改POM
写YML
主启动
业务类
修改8001/8002的Controller
2.3.7 负载均衡+测试
1.先要启动EurekaServer,7001/7002/7004服务
2.再要启动服务提供者provider,8001/8002服务
3.访问 http://localhost/consumer/payment/get/1
访问结果
原因:订单服务访问地址不能写死,否则无法进行负载均衡的调用,修改OrderController上的访问地址
**再次进行测试:**依旧报错…
@LoadBalanced注解赋予RestTemplate负载均衡的能力
再进行测试:成功!!!
2.3.8 对比官方给出的Eureka示意图
2.4 actuator微服务信息完善
2.4.1 主机名称:服务名称修改
当前问题:含有主机名称.
修改cloud-provider-payment8001的yaml,添加instance配置
eureka: instance: instance-id: payment8001
2.4.2 访问信息有IP信息提示
当前问题:没有IP提示
修改cloud-provider-payment8001的yaml
eureka: instance: instance-id: payment8001 prefer-ip-address: true #访问路径可以显示IP地址
2.5 服务发现Discovery
对于注册进eureka里面的微服务,可以通过服务发现来获得该服务的信息
- 修改cloud-provider-payment8001的Controller
@Slf4j @RestController public class PaymentController { //... @Resource private DiscoveryClient discoveryClient; //... @GetMapping(value = "/payment/discovery") public Object discovery(){ List <String> services = discoveryClient.getServices();//获取Eureka上所有的服务 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 this.discoveryClient; } }
- 为8001主启动类加上**@EnableDiscoveryClient**
@SpringBootApplication @EnableEurekaClient @EnableDiscoveryClient //服务发现 public class PaymentMain8001 { public static void main(String[] args) { SpringApplication.run(PaymentMain8001.class,args); } }
- 测试
先要启动EurekaServer,再启动8001主启动类,需要稍等一会儿,输入 http://localhost:8001/payment/discovery