写点什么

dubbo 实战之三:使用 Zookeeper 注册中心

  • 2022 年 4 月 19 日
  • 本文字数:3993 字

    阅读完需:约 13 分钟

<?xml version="1.0" encoding="UTF-8"?>


<project xmlns="http://maven.apache.org/POM/4.0.0"


xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"


xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">


<parent>


<artifactId>dubbopractice</artifactId>


<groupId>com.bolingcavalry</groupId>


<version>1.0-SNAPSHOT</version>


</parent>


<modelVersion>4.0.0</modelVers 《一线大厂 Java 面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》开源 ion>


<groupId>com.bolingcavalry</groupId>


<artifactId>springbootzkconsumer</artifactId>


<version>1.0-SNAPSHOT</version>


<name>springbootzkconsumer</name>


<description>Demo project for dubbo service consumer from Spring Boot</description>


<dependencyManagement>


<dependencies>


<dependency>


<groupId>org.springframework.boot</groupId>


<artifactId>spring-boot-dependencies</artifactId>


<version>2.3.3.RELEASE</version>


<type>pom</type>


<scope>import</scope>


</dependency>


</dependencies>


</dependencyManagement>


<dependencies>


<dependency>


<groupId>org.springframework.boot</groupId>


<artifactId>spring-boot-starter-web</artifactId>


</dependency>


<dependency>


<groupId>org.springframework.boot</groupId>


<artifactId>spring-boot-starter-test</artifactId>


<scope>test</scope>


</dependency>


<dependency>


<groupId>io.springfox</groupId>


<artifactId>springfox-swagger2</artifactId>


</dependency>


<dependency>


<groupId>io.springfox</groupId>


<artifactId>springfox-swagger-ui</artifactId>


</dependency>


<dependency>


<groupId>com.bolingcavalry</groupId>


<artifactId>practiceinterface</artifactId>


<version>${project.version}</version>


</dependency>


<dependency>


<groupId>org.apache.dubbo</groupId>


<artifactId>dubbo-dependencies-zookeeper</artifactId>


<type>pom</type>


</dependency>


<dependency>


<groupId>org.projectlombok</groupId>


<artifactId>lombok</artifactId>


</dependency>


<dependency>


<groupId>org.apache.dubbo</groupId>


<artifactId>dubbo-spring-boot-starter</artifactId>


</dependency>


</dependencies>


<build>


<plugins>


<plugin>


<groupId>org.springframework.boot</groupId>


<artifactId>spring-boot-maven-plugin</artifactId>


<version>${springboot.version}</version>


</plugin>


</plugins>


</build>


</project>


  1. 编写配置文件 application.yml,注意 dubbo.registry.address 的值:


dubbo:


application:


#application-name 本模块名字


name: springboot-zk-consumer


registry:


address: zookeeper://192.168.50.43:2181


server:


port: 8081


  1. 编写调用远程服务的代码,如下,可见如果想调用远程服务,只要对接口做 @Reference 注释即可,另外还通过 timeout 属性增加了超时配置:


package com.bolingcavalry.springbootzkconsumer.service;


import com.bolingcavalry.dubbopractice.service.DemoService;


import org.apache.dubbo.config.annotation.Reference;


import org.springframework.stereotype.Service;


@Service


public class RemoteInvokeServiceImpl {


@Reference(timeout = 2000)


private DemoService demoService;


public String sayHello(String name) {


return "from dubbo remote (zk registry center mode) : " + demoService.sayHello(name);


}


}


  1. 再编写对外提供 web 服务的 Controller 类:


package com.bolingcavalry.springbootzkconsumer.controller;


import com.bolingcavalry.springbootzkconsumer.service.RemoteInvokeServiceImpl;


import io.swagger.annotations.Api;


import io.swagger.annotations.ApiImplicitParam;


import io.swagger.annotations.ApiOperation;


import org.springframework.beans.factory.annotation.Autowired;


import org.springframework.web.bind.annotation.PathVariable;


import org.springframework.web.bind.annotation.RequestMapping;


import org.springframework.web.bind.annotation.RequestMethod;


import org.springframework.web.bind.annotation.RestController;


@RestController


@RequestMapping("/demo")


@Api(tags = {"DemoController"})


public class DemoController {


@Autowired


private RemoteInvokeServiceImpl remoteInvokeService;


@ApiOperation(value = "获取 dubbo service provider 的响应", notes=""获取 dubbo service provider 的响应")


@ApiImplicitParam(name = "name", value = "昵称", paramType = "path", required = true, dataType = "String")


@RequestMapping(value = "/{name}", method = RequestMethod.GET)


public String sayHello(@PathVariable String name){


return remoteInvokeService.sayHello(name);


}


}


  1. 还要添加 swagger 配置类:


package com.bolingcavalry.springbootzkconsumer;


import org.springframework.context.annotation.Bean;


import org.springframework.context.annotation.Configuration;


import springfox.documentation.builders.ApiInfoBuilder;


import springfox.documentation.builders.PathSelectors;


import springfox.documentation.builders.RequestHandlerSelectors;


import springfox.documentation.service.ApiInfo;


import springfox.documentation. Java 开源项目【ali1024.coding.net/public/P7/Java/git】 service.Contact;


import springfox.documentation.service.Tag;


import springfox.documentation.spi.DocumentationType;


import springfox.documentation.spring.web.plugins.Docket;


import springfox.documentation.swagger2.annotations.EnableSwagger2;


@Configuration


@EnableSwagger2


public class SwaggerConfig {


@Bean


public Docket createRestApi() {


return new Docket(DocumentationType.SWAGGER_2)


.apiInfo(apiInfo())


.tags(new Tag("DemoController", "演示服务"))


.select()


// 当前包路径


.apis(RequestHandlerSelectors.basePackage("com.bolingcavalry.springbootzkconsumer.controller"))


.paths(PathSelectors.any())


.build();


}


//构建 api 文档的详细信息函数,注意这里的注解引用的是哪个


private ApiInfo apiInfo() {


return new ApiInfoBuilder()


//页面标题


.title("dubbo 远程调用服务的操作(zk 注册中心)")


//创建人


.contact(new Contact("程序员欣宸", "https://github.com/zq2599/blog_demos", "zq2599@gmail.com"))


//版本号


.version("1.0")


//描述


.description("API 描述")


.build();


}


}


  1. 最后是启动类 SpringBootZKConsumerApplication.java:


package com.bolingcavalry.springbootzkconsumer;


import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;


import org.springframework.boot.SpringApplication;


import org.springframework.boot.autoconfigure.SpringBootApplication;


@SpringBootApplication


@EnableDubbo


public class SpringBootZKConsumerApplication {


public static void main(String[] args) {


SpringApplication.run(SpringBootZKConsumerApplication.class, args);


}


}


  1. 至此,服务消费方编码完成,直接在 IDEA 上运行 SpringBootZKConsumerApplication 类即可启动,如下图,可见服务消费方也连接 Zookeeper 成功:



  1. 通过浏览器访问 swagger,地址是:http://localhost:8081/swagger-ui.html ,如下图,点击红框位置展开接口详情:



  1. 如下图,输入 web 接口参数发起请求:



  1. 下图红框中就是响应的数据,内容是 springbootzkconsumer 远程调用 springbootzkprovider 的服务得到的:


[](()查看 Zookeeper 上的数据

  1. 再回顾一下官方的有关 Zookeeper 注册中心中数据的描述,如下图:



  1. 按照上述信息,咱们去 Zookeeper 看看数据,验证和上图是否一致,登录 Zookeeper 后执行 zkCli.sh 进度交互模式;

  2. 查看根目录,果然有名为 dubbo 的子目录:


[zk: localhost:2181(CONNECTED) 18] ls /


[dubbo, log_dir_event_notification, isr_change_notification, zookeeper, admin, consumers, cluster, config, latest_producer_id_block, controller, brokers, controller_epoch]


  1. 再看 dubbo 目录下,有远程服务的子目录:


[zk: localhost:2181(CONNECTED) 19] ls /dubbo


[com.bolingcavalry.dubbopractice.service.DemoService, config, metadata]

最后我们该如何学习?

1、看视频进行系统学习


这几年的 Crud 经历,让我明白自己真的算是菜鸡中的战斗机,也正因为 Crud,导致自己技术比较零散,也不够深入不够系统,所以重新进行学习是很有必要的。我差的是系统知识,差的结构框架和思路,所以通过视频来学习,效果更好,也更全面。关于视频学习,个人可以推荐去 B 站进行学习,B 站上有很多学习视频,唯一的缺点就是免费的容易过时。


另外,我自己也珍藏了好几套视频资料躺在网盘里,有需要的我也可以分享给你:



2、读源码,看实战笔记,学习大神思路


“编程语言是程序员的表达的方式,而架构是程序员对世界的认知”。所以,程序员要想快速认知并学习架构,读源码是必不可少的。阅读源码,是解决问题 + 理解事物,更重要的:看到源码背后的想法;程序员说:读万行源码,行万种实践。


Spring 源码深度解析:



Mybatis 3 源码深度解析:



Redis 学习笔记:



Spring Boot 核心技术-笔记:



3、面试前夕,刷题冲刺


面试的前一周时间内,就可以开始刷题冲刺了。请记住,刷题的时候,技术的优先,算法的看些基本的,比如排序等即可,而智力题,除非是校招,否则一般不怎么会问。


关于面试刷题,我个人也准备了一套系统的面试题,帮助你举一反三:



只有技术过硬,在哪儿都不愁就业,“万般带不去,唯有业随身”学习本来就不是在课堂那几年说了算,而是在人生的旅途中不间断的事情。


人生短暂,别稀里糊涂的活一辈子,不要将就。

用户头像

还未添加个人签名 2022.04.13 加入

还未添加个人简介

评论

发布
暂无评论
dubbo实战之三:使用Zookeeper注册中心_Java_爱好编程进阶_InfoQ写作平台