zoukankan      html  css  js  c++  java
  • Spring Cloud 整合 Zookeeper 实现 微服务

    环境配置:JDK8 +IDEA 开发工具

    **说明:下面搭建过程基于你本地已经配置好zookeeper

    一、先搭建父工程(PS:是可以不搭建父工程的,即每个服务和client都是单独的spring boot项目,也是OK的,搭建父工程纯粹为了将项目放在一起,且pom文件可以少一点而已!)

    1、先搭建父工程:spring initial -- 第二步,Type改成Maven Pom,Artifact改成demo-parent,便于理解 -- 引入两个依赖,web和zookeeper-discovery;搭建完后,记得改maven路径,并删除一些无用的文件

    【【Create New Project -- 选Maven -- Next -- 填写GroupId:com.example,ArtifactId:dubbo-parent -- Next -- 如果Project name和ArtifactId不一致,可以改成一样的,再设置项目存放路径(要先建好dubbo-parent的文件夹,再指定到该文件夹下面,否则会出现很喷饭的情况) -- Finish;完成创建,创建完后,要立即设定 项目Maven的路径,并删掉src目录 》》》这样生成的Maven项目,pom文件是空的,要手动引入spring boot作为<parent>依赖,等其他配置,如果不想手动配,就直接将dubbo-parent也建成spring boot项目类型】】

    附:像 common模块,不要建成spring boot项目,直接建成 maven项目,步骤:右键父项目 -- new -- module -- 选Maven -- next -- 填写ArtifactId为dubbo-common -- next -- 如果Module name和ArtifactId不一致,可以改成一致的 -- finish;完成common模块创建,然后放入一些公共代码。。。

    PS:点开对应的pom文件查看,会发现<parent>已经是 我们的 父工程 ,不用再手动修改;而且 父级pom文件<modules>也已经主动添加了common模块

    但是src - main - java目录下直接是空的,为了和其他模块保持一致,在java路径后 新建 com.example.common包,其他所有公共代码都放在这个下面

    这里是2019-08-13补充发现的 》》》之前api模块,也是建的spring boot项目,是通过发布到本地maven仓库的方式,给provider和consumer模块引用,而最开始,common模块,我也是建成的spring boot项目,但是没有发布到本地maven仓库(直接用IDEA的install是有问题的,解压对应jar包发现多了BOOT-INF包),发现install父级项目时,一直报common里面的 类找不到;

    但是,现在common模块是maven项目,用IDEA install后,解压生成的jar包(maven本地仓库的jar)发现还是有BOOT-INF包,,,这个很好解决,在pom文件加入<skip>true</skip>即可,完整如下:

    <build>
            <plugins>
                <!--springboot打包插件-->
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <configuration>
                        <skip>true</skip>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    解决install多出BOOT-INF包问题

    【api模块是spring boot项目,模拟spring boot项目如何打包发布到本地仓库,而common模块是Maven项目,模拟如何打包发布到本地Maven仓库】

    2、再搭建一个服务,也就是provider:在(1)搭建好的demo-parent上右键 -- new -- module -- Spring Initializr -- next -- Artifact改成demo-server,Package也可以优化改一下 -- next,这里是服务端,会有DB的操作,所有引入了mongoDB --next --finish;然后:

    完成后吧pom文件的parent改成(1)中父工程的;

    改配置文件。用yml形式,配置zookeeper

    再随便建个Cintroller,定义一个测试接口

    最后Application程序入口添加注解@EnableDiscoveryClient

    》》先启动zookeeper,zookeeper后台也要运行jar包才能访问9090端口查看

    巨坑之:发现测试接口一直报404,还另外新建了一个项目来对比,发现controller路径放错了,改成和Application同级下,一切OK了!

    而zookeeper配置并没有问题,也很简单

    3、搭建一个服务消费者:创建过程同(2)里面的,只是Artifact改成demo-client,引入的依赖改成,然后:

    完成后吧pom文件的parent改成(1)中父工程的;

    改配置文件。用yml形式,配置zookeeper,其中spring.cloud.zookeeper.discovery.register=false,也再ZK UI就不会出现了

    定义一个用@FeignClient(value = "server-name")的接口,里面方法对应服务里面提供的方法,且server-name与服务提供里面配置的spring.application.name的值对应,示例如下:

    @FeignClient(value = "server yml 文件 spring.application.name 对应的值")
    public interface FeignService {
    
        @RequestMapping("/test")
        String printString(@RequestParam(name="name") String name);
    }

    再随便建个Controller,定义一个测试接口,接口里面调用接口里面的方法即可,示例如下:

      @Autowired
        FeignService feignService;
      //注意这里client/test是客户端自己定义的调用url,且、且、且千万不能/开头,即/client/test,是会报错的,服务调不通
        @RequestMapping("client/test")
        public String ps(String name){
            return feignService.printString(name);
        }

    最后Application程序入口添加注解@EnableDiscoveryClient和@EnableFeignClients

    二、要最先启动zookeeper服务,也可以启动zookeeper UI

    三、依次启动 server 和 client,再在浏览器调用测试方法,即可查看结果!

  • 相关阅读:
    Github国内mirror加速
    通过node-inspector或VSCode调试服务器上代码
    node nvm 常见命令
    HBuilderX 修改默认的终端
    LLVM 工具使用
    LLVM 获取Value Type
    LLVM Constant Value to c++ value
    Bison 命名位置
    llvm block
    vscode use cl.exe build C/C++
  • 原文地址:https://www.cnblogs.com/zz-3m23d-begining/p/11077428.html
Copyright © 2011-2022 走看看