dw制作wap网站怎么做,企业解决方案模板,微网站欣赏,一年的百度指数服务提供者集群
既然SpringCloud的是微服务结构#xff0c;那么对于同一种服务#xff0c;当然不可能只有一个节点#xff0c;需要部署多个节点
架构图如下#xff1a; 由上可以看出存在多个同一种服务提供者#xff08;Service Provider#xff09;
搭建服务提供者集…服务提供者集群
既然SpringCloud的是微服务结构那么对于同一种服务当然不可能只有一个节点需要部署多个节点
架构图如下 由上可以看出存在多个同一种服务提供者Service Provider
搭建服务提供者集群
1、参考SpringCloud 快速入门搭建单机版的Eureka Server、Service Provider、Service Consumer
2、根据支付模块服务提供者test-springcloud-provider-payment8001在父工程中同样新建一个支付模块的服务提供者test-springcloud-provider-payment8002
服务8001与8002的配置中除端口外其他都相同且spring.application.name应用名称必须相同表明2个服务是同一种服务
服务8002配置文件如下 1 # 端口2 server:3 port: 80024 5 spring:6 application:7 name: cloud-payment-service8 # 数据源基本配置9 datasource:
10 driver-class-name: com.mysql.cj.jdbc.Driver
11 url: jdbc:mysql://localhost:3306/test_springcloud?allowPublicKeyRetrievaltrueuseSSLtrue
12 username: admin
13 password: 123456
14
15 eureka:
16 client:
17 # 表示将自己注册进Eureka Server默认为true
18 register-with-eureka: true
19 # 是否从Eureka Server抓去已有的注册信息默认是true
20 fetch-registry: true
21 # 设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址
22 service-url:
23 defaultZone: http://localhost:8761/eureka
24
25 mybatis:
26 mapperLocations: classpath:mapper/*Mapper.xml
27 # 所有entity别名类所在的包
28 type-aliases-pachage: com.test.springcloud.entitiesView Code
3、重新启动项目打开Eureka查看发现有2个支付服务 4、使用订单模块消费者调用支付服务
消费者部分代码模块如下 1 Configuration2 public class AppConfig {3 4 /**5 * 注入restTemplate请用请求rest接口6 * return7 */8 Bean9 // 标注此注解后RestTemplate就具有了客户端负载均衡能力
10 // 负载均衡技术依赖于的是Ribbon组件~
11 // RestTemplate都塞入一个loadBalancerInterceptor 让其具备有负载均衡的能力
12 LoadBalanced
13 public RestTemplate restTemplate(){
14 return new RestTemplate();
15 }
16 }
17
18
19 RestController
20 Slf4j
21 public class OrderController {
22
23 public static final String PAYMENT_URL http://CLOUD-PAYMENT-SERVICE;
24
25 Autowired
26 private RestTemplate restTemplate;
27
28 GetMapping(/consumer/payment/get/{id})
29 public CommonResultPayment getPayment(PathVariable(id) Long id){
30 return restTemplate.getForObject(PAYMENT_URL /payment/get/ id, CommonResult.class);
31 }
32
33 ...
34 }由上可以通过配置向容器中注入了RestTemplate对象而RestTemplate又被标注此LoadBalanced注解后RestTemplate就具有了客户端负载均衡能力也就是说RestTemplate会轮流调用服务的各个节点到达均衡的目的
5、测试调用启动项目使用地址http://localhost:8000/consumer/payment/get/1进行访问可以看到已到达负载均衡的目的 服务发现Discovery
服务发现就是对于注册进eureka里面的微服务可以通过服务发现获得该服务的信息
案例如下
1、在微服务中使用EnableDiscoveryClient注解启用服务发现 1 // Eureka客户端2 EnableEurekaClient3 // 启用服务发现4 EnableDiscoveryClient5 SpringBootApplication6 public class PaymentMain8001 {7 public static void main(String[] args) {8 SpringApplication.run(PaymentMain8001.class, args);9 }
10 }2、编辑Controller启用服务发现之后它会自动向容器注入DiscoveryClient服务发现客户端
通过调用DiscoveryClient的getServices方法从注册中心获取服务列表
通过调用DiscoveryClient的getInstances方法从注册中心获取服务实例集 1 public class PaymentController {2 3 Autowired4 private DiscoveryClient discoveryClient;5 6 GetMapping(value /payment/discovery)7 public Object discovery(){8 // 获取服务列表9 ListString services discoveryClient.getServices();
10 for (String element : services) {
11 log.info(element: element);
12 }
13
14 // 获取服务实例集
15 ListServiceInstance instances discoveryClient.getInstances(CLOUD-PAYMENT-SERVICE);
16 for (ServiceInstance instance : instances) {
17 log.info(服务发现 \n
18 getServiceId instance.getServiceId() \n
19 getHost instance.getHost() \n
20 getPort instance.getPort() \n
21 getUri instance.getUri() );
22 }
23
24 return this.discoveryClient;
25 }
26
27 } 3、启用服务使用地址http://localhost:8001/payment/discovery进行访问
页面结果 后台日志 由上可知通过DiscoveryClient能获取到注册进eureka里面的微服务信息。