• SpringCloud服务的注册发现--------zookeeper实现服务与发现 + Ribbon实现客户端负载均衡


    1,Eureka 闭源了,但是我们可以通过zookeeper实现注册中心的功能。

          zookeeper 是一个分布式协调工具,可以实现服务的注册和发现,配置中心,注册中心,消息中间件的功能

    2,工具准备

         windows 版本的zookeeper-3.3.6,以及客户端查看工具ZooInspector

    3,打开zookeeper 服务

    4,配置需要注册到zookeeper 上的服务,maven 依赖

    member 服务:

    ###订单服务的端口号
    server:
      port: 8000
    ###服务别名----服务注册到注册中心名称 
    spring:
      application:
        name: zk-member
      cloud:
        zookeeper:
          connect-string: 127.0.0.1:2181

    order服务:

    ###订单服务的端口号
    server:
      port: 8001
    ###服务别名----服务注册到注册中心名称 
    spring:
      application:
        name: zk-order
      cloud:
        zookeeper:
          connect-string: 127.0.0.1:2181

    启动类上加上注解:@SpringBootApplication 代表如果注册中心不是Eureka 的,比如consul,zookeepr 或者其他,可以用这个去注册,(springboot2.0 发现不加这个也可以)

    member的启动类:

    @SpringBootApplication
    @EnableDiscoveryClient
    public class App {
        public static void main(String[] args) {
            SpringApplication.run(App.class, args);
        }
    
        // 注册到spring容器中
        @Bean
        // 开启负载均衡
        @LoadBalanced
        RestTemplate restTemplate() {
            return new RestTemplate();
        }
    
    }

    order的启动类:

    @SpringBootApplication
    @EnableDiscoveryClient
    public class App {
        public static void main(String[] args) {
            SpringApplication.run(App.class, args);
        }
    }

    正常启动,就会发现,zookeeper 上就会有这几个节点了,zookeeper 实现注册中心创建的是临时节点

    可以看到service 服务下面有zk-member 和 zk-order 节点,zk-order 节点实现了集群

    5,zookeeper_member 服务去访问zookeeper_order 服务还是通过RestTemplate 的方式去访问,RestTemplate 是依赖Ribbon的,所以是具有客户端负载均衡功能的,zk_order 有集群,所以会通过轮询的方式去访问。

     

    zookeep_member: 访问者

    @RestController
    public class IndexMemberController {
    
        // 封装了http方法,显得更加的优雅
        @Autowired
        private RestTemplate restTemplate;
    
        @RequestMapping("/getOrder")
        public String getOrder() {
            // url会在eureka注册中心上通过别名进行查找,restTemplate通过别名来找服务,是依赖ribbon,所以RestTemplate初始化要加上@LoadBalanced
            String orderUrl = "http://zk-order/getOrder";
            String res = restTemplate.getForObject(orderUrl, String.class);
            System.out.println("rpc远程调用服务成功");
            return res;
        }
    }

    zookeep_order: 被访问者

    @RestController
    public class IndexOrderController {
    
        @Value("${server.port}")
        private String port;
    
        @RequestMapping("/getOrder")
        public String getOrder() {
            return "获得订单成功,正在访问的端口号是: " + port;
        }
    
    }

    结果:达到轮询效果

    获得订单成功,正在访问的端口号是: 8002
    获得订单成功,正在访问的端口号是: 8001
  • 相关阅读:
    (转)下拉刷新组合控件的制作小结
    ActivityGroup的子activity响应back事件的顺序问题
    用CSS实现竖向圆角效果的折叠菜单代码
    蓝色风格的JS+CSS个性菜单代码
    用CSS实现WinVista风格的菜单代码
    div+css+js打造的一款菜单的收缩与展开代码
    五颜六色的弹性下拉导航菜单代码
    【荐】鼠标放上弹出下拉菜单的代码
    网页顶部隐藏css菜单代码
    【教程】简单滑动门代码
  • 原文地址:https://www.cnblogs.com/pickKnow/p/11383872.html
Copyright © 2020-2023  润新知