下载APP
登录
关闭
讲堂
算法训练营
Python 进阶训练营
企业服务
极客商城
客户端下载
兑换中心
渠道合作
推荐作者
当前播放: 95 | 使用Zookeeper作为服务注册中心
00:00 / 00:00
标清
  • 标清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看

玩转Spring全家桶

共123讲 · 123课时,1300分钟
24783
免费
01 | Spring课程介绍
免费
02 | 一起认识Spring家族的主要...
免费
03 | 跟着Spring了解技术趋势
免费
04 | 编写你的第一个Spring程序
免费
05 | 如何配置单数据源
免费
06 | 如何配置多数据源
07 | 那些好用的连接池们:Hika...
08 | 那些好用的连接池们:Alib...
09 | 如何通过Spring JDBC访问...
10 | 什么是Spring的事务抽象(...
11 | 什么是Spring的事务抽象(...
免费
12 | 了解Spring的JDBC异常抽象
13 | 课程答疑(上)
14 | 课程答疑(下)
15 | 认识Spring Data JPA
16 | 定义JPA的实体对象
17 | 开始我们的线上咖啡馆实战...
18 | 通过Spring Data JPA操...
19 | Spring Data JPA的Repos...
20 | 通过MyBatis操作数据库
21 | 让MyBatis更好用的那些工...
22 | 让MyBatis更好用的那些工...
23 | SpringBucks实战项目进度...
24 | 通过Docker辅助开发
25 | 在Spring中访问MongoDB
26 | 在Spring中访问Redis
27 | Redis的哨兵与集群模式
28 | 了解Spring的缓存抽象
29 | Redis在Spring中的其他用...
30 | SpringBucks实战项目进度...
31 | Project Reactor介绍(上...
32 | Project Reactor介绍(下...
33 | 通过Reactive的方式访问Re...
34 | 通过Reactive的方式访问Mo...
35 | 通过Reactive的方式访问RD...
36 | 通过AOP打印数据访问层的...
37 | 通过AOP打印数据访问层的...
38 | SpringBucks实战项目进度...
39 | 编写第一个Spring MVC C...
40 | 理解Spring的应用上下文
41 | 理解请求的处理机制
42 | 如何定义处理方法(上)
43 | 如何定义处理方法(下)
44 | Spring MVC中的视图解析...
45 | Spring MVC中的视图解析...
46 | Spring MVC中的常用视图...
47 | Spring MVC中的常用视图...
48 | 静态资源与缓存
49 | Spring MVC中的异常处理...
50 | 了解Spring MVC的切入点
51 | SpringBucks实战项目进度...
52 | 课程答疑
53 | 通过RestTemplate访问Web...
54 | RestTemplate的高阶用法
55 | 简单定制RestTemplate
56 | 通过WebClient访问Web资源
57 | SpringBucks实战项目进度...
58 | 设计好的RESTful Web Se...
59 | 设计好的RESTful Web Se...
60 | 什么是HATEOAS
61 | 使用Spring Data REST实...
62 | 使用Spring Data REST实...
63 | 分布式环境中如何解决Sess...
64 | 使用WebFlux代替Spring M...
65 | 使用WebFlux代替Spring M...
66 | SpringBucks实战项目进度...
67 | 认识Spring Boot的组成部...
68 | 了解自动配置的实现原理
69 | 动手实现自己的自动配置
70 | 如何在低版本Spring中快速...
71 | 了解起步依赖及其实现原理
72 | 定制自己的起步依赖
73 | 深挖Spring Boot的配置加...
74 | 理解配置背后的PropertyS...
75 | 认识Spring Boot的各类Ac...
76 | 动手定制自己的Health In...
77 | 通过Micrometer获取运行数...
78 | 通过Spring Boot Admin...
79 | 如何定制Web容器的运行参...
80 | 如何配置容器支持HTTP/2...
81 | 如何配置容器支持HTTP/2...
82 | 如何编写命令行运行的程序
83 | 了解可执行Jar背后的秘密
84 | 如何将Spring Boot应用打...
85 | SpringBucks实战项目进度...
86 | 简单理解微服务
87 | 如何理解云原生(Cloud N...
88 | 12-Factor App(上)
89 | 12-Factor App(下)
90 | 认识Spring Cloud的组成...
91 | 使用Eureka作为服务注册中...
92 | 使用Spring Cloud Loadb...
93 | 使用Feign访问服务
94 | 深入理解服务发现背后的Di...
95 | 使用Zookeeper作为服务注...
96 | 使用Consul作为服务注册中...
97 | 使用Nacos作为服务注册中...
98 | 如何定制自己的Discovery...
99 | SpringBucks实战项目进度...
100 | 使用Hystrix实现服务熔...
101 | 使用Hystrix实现服务熔...
102 | 如何观察服务熔断
103 | 使用Resilience4j实现服...
104 | 使用Resilience4j实现服...
105 | 使用Resilience4j实现服...
106 | SpringBucks实战项目进度...
107 | 基于Git的配置中心(上)
108 | 基于Git的配置中心(下)
109 | 基于Zookeeper的配置中心
110 | 深入理解Spring Cloud的...
111 | 基于Consul的配置中心
112 | 基于Nacos的配置中心
113 | SpringBucks实战项目进度...
114 | 认识Spring Cloud Stre...
115 | 通过Spring Cloud Stre...
116 | 通过Spring Cloud Stre...
117 | SpringBucks实战项目进度...
118 | 通过Dapper理解链路治理
119 | 使用Spring Cloud Sleu...
120 | 如何追踪消息链路
121 | 除了链路还要治理什么
122 | SpringBucks实战项目进度...
123 | 结束语

精选留言(12)

  • 2019-05-15
    整理了一下需要使用到的命令:



    获取镜像:

    docker pull zookeeper:3.5
    运行:

    docker run --name zookeeper -p 2181:2181 -d zookeeper:3.5
    操作:

    在docker中进入zookeeper命令行;
    docker exec -it zookeeper bash
    进入zookeeper的bin目录:
    cd bin
    使用zookeeper client访问zookeeper服务:
    ./zkCli.sh
    查看
    ls /
    查看所有services:
    ls /services
    查看waiter-service的信息:
    ls /services/waiter-service
    根据[id]查看相关服务的详细信息(id是动态的):
    ls /services/waiter-service/[id]
    示例:

    ls /services/waiter-service/54ef0739-0627-478f-ad5a-4b7287854da4
    获取相关服务的详细信息(id是动态的):
    get /services/waiter-service/[id]
    示例:

    get /services/waiter-service/54ef0739-0627-478f-ad5a-4b7287854da4
    获取相关服务的详细信息(id是动态的):
    get /services/customer-service/[id]
    示例:

    get /services/customer-service/9df270b5-637a-451e-b69c-14f222f4cf3a
    展开
    2
  • 2019-08-16
    zookeeper副本不建议超过7个,不让复制成本太大。
    1
  • zookeeper服务端使用3.4.x版本的话需要修改pom文件,排除<exclusions>
                    <exclusion>
                        <groupId>org.apache.zookeeper</groupId>
                        <artifactId>zookeeper</artifactId>
                    </exclusion>
                </exclusions>
    重新添加zookeeper 3.4.x版本就不会报错了
    展开
    1
  • 2019-11-06
    老师,我导入你的项目后,log.info()打印信息的地方;
    log报红,是不是哪里定义了log的全局变量?我这里为什么没有生效?

    作者回复: 加了@Slf4j注解,用了Lombok,你可以回到课程前面看看第一个答疑视频。IDEA中需要安装Lombok插件。

  • 2019-07-11
    Sleep extension too large (1050). Pinning to 500
    Opening socket connection to server 127.0.0.1/127.0.0.1:2181. Will not attempt to authenticate using SASL (unknown error)
    Socket connection established to 127.0.0.1/127.0.0.1:2181, initiating session
    Client session timed out, have not heard from server in 30001ms for sessionid 0x0, closing socket connection and attempting reconnect
    Sleep extension too large (1500). Pinning to 500
    Opening socket connection to server 0:0:0:0:0:0:0:1/0:0:0:0:0:0:0:1:2181. Will not attempt to authenticate using SASL (unknown error)
    Socket connection established to 0:0:0:0:0:0:0:1/0:0:0:0:0:0:0:1:2181, initiating session
    Client session timed out, have not heard from server in 30001ms for sessionid 0x0, closing socket connection and attempting reconnect

    丁老师, waiter-server 已经正常注册,但是customer-server启动时无法访问,一直循环报这个
    展开
  • 2019-07-05
    D:\geektime-spring-family\Chapter 12\zk-waiter-service\src\main\java\geektime\spring\springbucks\waiter\WaiterServiceApplication.java
    这个类启动报拒绝连接错误,快来人解决一下啊。

    作者回复: 请问启动报了什么错呢?连什么东西拒绝连接了?是不是你本地ZK没启动呀

    1
  • 2019-07-05
    java.net.ConnectException: Connection refused: no further information
    百度说三种可能:
    1 网络不通,端口不可用等;
    2 zookeeper服务程序未正常启动;
    3 防火墙未关闭;
    我都解决了。但是还是报这个错误,对着视频步骤复制的。希望能有人帮我早点解决,真的怒了
    展开
  • 2019-06-28
    老师,我在24日提了一个问题,我看你把他列出来了,但没有回复,因为我的问题前面铺垫比较长,是不是没看到最后的问题呢?😂

    作者回复: 前面回答了,我隔一段时间处理一次留言,所以回答不一定及时,抱歉

  • 2019-06-24
    把zk-waiter-service 扩展了一下,CoffeeOrderController 提供获取订单列表的接口:

    @GetMapping(value = "/", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
        @ResponseBody
        public List<CoffeeOrder> listOrder() {
            log.info("List order");
            List<CoffeeOrder> order = orderService.list();
            return order;
        }

    CoffeeOrderService 提供了实现:

        public List<CoffeeOrder> list() {
            return orderRepository.findAll(Sort.by("id"));
        }

    zk-customer-service 在按id查询一个订单后,再执行一下查询所有订单的接口:

        private void queryAllOrder() {
            ParameterizedTypeReference<List<CoffeeOrder>> ptr = new ParameterizedTypeReference<List<CoffeeOrder>>() {};
            ResponseEntity<List<CoffeeOrder>> list = restTemplate.exchange("http://waiter-service/order/", HttpMethod.GET, null, ptr);
            list.getBody().forEach(o -> log.info("itr order: {}", o));
        }

    问题来了,获取订单列表的时候,每个订单输出的信息并没有包含具体的咖啡信息(可以看到下面items字段都是null):

    itr order: CoffeeOrder(id=1, customer=Lily, items=null, state=INIT, createTime=Mon Jun 24 15:12:21 CST 2019, updateTime=Mon Jun 24 15:12:21 CST 2019)
    itr order: CoffeeOrder(id=2, customer=Lily, items=null, state=INIT, createTime=Mon Jun 24 15:14:26 CST 2019, updateTime=Mon Jun 24 15:14:26 CST 2019)
    itr order: CoffeeOrder(id=3, customer=Li Lei, items=null, state=INIT, createTime=Mon Jun 24 15:16:48 CST 2019, updateTime=Mon Jun 24 15:16:48 CST 2019)

    看WaiterServiceApplication输出的日志,可以看到并没有执行关联查询查具体的coffee信息:

    Hibernate:
        select
            coffeeorde0_.id as id1_1_,
            coffeeorde0_.create_time as create_t2_1_,
            coffeeorde0_.update_time as update_t3_1_,
            coffeeorde0_.customer as customer4_1_,
            coffeeorde0_.state as state5_1_
        from
            t_order coffeeorde0_
        order by
            coffeeorde0_.id asc

    这是为什么呢?我自己新建工程重写一遍也是如此,同样的代码逻辑,按照本章之前的教程做下来、不做服务化改造的时候都是正常的。
    展开

    作者回复: Hibernate有懒加载,你设置eager模式把懒加载关了,就能直接把集合也加载出来了。

  • 2019-06-04
    请问,服务注册不上去是怎么原因? Zookeeper里没有services目录。谢谢。

    作者回复: 是不是没连上ZK呢?看看配置的地址对不对。

  • 2019-05-11
    老师再请教一下, 我这边zk用的是3.4.10的版本, 项目启动报错Caused by: org.apache.zookeeper.KeeperException$UnimplementedException: KeeperErrorCode = Unimplemented for /services/waiter-service/113ec288- 查到是zk版本不对, 后来换成3.5的版本就可以了, 想问下老师在项目依赖中怎么看zk客户端适用的zk版本, 比如项目中spring-boot-actuator 2.1.4.RELEASE我怎么能知道这个客户端适用的zk版本

    作者回复: 看Maven依赖的版本,我IDE里装了MavenHelper插件可以图形化地看到依赖,你也可以用mvn dependency:tree命令打印所有依赖

  • 2019-05-11
    老师请问一下多机房的zk脑列问题影响比较大这一点是像阿里那篇文章说的成为孤岛的机房同机房的服务无法调用吗, 还有其他问题吗? dubbo本身在消费者端有缓存生产者信息, 服务调用时也不用通过zk, 服务还可以调用, 所以我好像没看出来在dubbo中多机房部署zk有啥更严重的问题.

    作者回复: 那文章的意思就是服务注册中心本身不应该造成服务不可用,因此像ZK造成服务不通是不允许出现的情况。Dubbo的确是在本地有缓存,但在ZK出问题时,另一个机房的服务和本机房ZK断了,它可能会认为大量服务节点下线了,情况也比较复杂,所以尽量还是别跨机房部署吧,更何况哪怕一个机房里都有可能有网络问题……