zoukankan      html  css  js  c++  java
  • 安装ZooKeeper/SpringBoot使用dubbo3.0.2

    Apache Dubbo 是一款微服务开发框架,它提供了 RPC通信 与 微服务治理 两大关键能力。这意味着,使用 Dubbo 开发的微服务,将具备相互之间的远程发现与通信能力, 同时利用 Dubbo 提供的丰富服务治理能力,可以实现诸如服务发现、负载均衡、流量调度等服务治理诉求。同时 Dubbo 是高度可扩展的,用户几乎可以在任意功能点去定制自己的实现,以改变框架的默认行为来满足自己的业务需求。
    zk参考:https://blog.csdn.net/qq_43472877/article/details/111177298
    dubbo参考:https://blog.csdn.net/muriyue6/article/details/109304584
    dubbo官方文档:https://dubbo.apache.org/zh/docs/quick-start/
    dubbo示例代码:https://github.com/apache/dubbo-samples
    1、下载zookeeper:https://dlcdn.apache.org/zookeeper/
    会列出很多,下载最新版本的,要下载带bin的文件:apache-zookeeper-3.7.0-bin.tar.gz
    2、解压,找到/conf/zoo_sample.cfg复制一个,修改名字为:zoo.cfg
    3、找到/bin/zkServer.cmd这是服务端,以管理员身份运行,要开启,保持不要关闭。可能会报错:ZooKeeper audit is disabled.
    需要编辑zkServer.cmd,在call %JAVA%后加上"-Dzookeeper.audit.enable=true" 注意前后空格隔开
    4、管理员身份运行客户端/bin/zkCli.cmd,保持开启,不要关闭。zookeeper端口默认是2181
    5、客户端可以执行命令:
    create /keyname value 创建一个键值对
    应该还有其他命令,命令的作用,我还没研究。
    6、下载dubbo-admin,这是一个服务监控程序,可以看到注册了哪些服务:https://github.com/apache/dubbo-admin/
    解压,然后cmd进入解压目录,然后执行命令 mvn clean compile package -Dmaven.test.skip=true,打包dubbo,要下包很慢。也可以用idea打开,自动导入包,然后打包。
    dubbo-admin的账户密码默认是root、root。最新版的前端是用vue写的,我执行npm install总是不成功,建议下载 master-0.2.0这个。
    运行dubbo-admin,访问:http://localhost:7001/,可以看到所有注册的服务和相关监控信息。
    7、执行jar包,进入jar包目录 java -jar jar包路径
    8、服务端和消费端pom.xml依赖,pom依赖是一样的,我用的最新版本的dubbo V3.0.2

    <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>org.apache.dubbo</groupId>
                <artifactId>dubbo-dependencies-zookeeper</artifactId>
                <version>3.0.2</version>
                <type>pom</type>
                <exclusions>
                    <exclusion>
                        <groupId>org.slf4j</groupId>
                        <artifactId>slf4j-log4j12</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-spring-boot-starter</artifactId>
                <version>3.0.2</version>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    

    老是报错:log4j的警告,百度了说是log4j和logback冲突,搞半天也没解决。
    9、服务端接口与启动类标注

    package com.jay.service;
    public interface BookService {
        String getBook();
    }
    

    实现:类上面要加@DubboService,标注这是一个要注册到zookeeper的dubbo服务

    package com.jay.service;
    import org.apache.dubbo.config.annotation.DubboService;
    @DubboService
    public class BookServiceImpl implements BookService {
        @Override
        public String getBook() {
            return "《星辰变》";
        }
    }
    

    服务端的启动类要开启Dubbo服务发现,要标注@EnableDubbo,不然发现不了你写的@DubboService,就没法注册到zookeeper了。

    package com.jay;
    import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    @EnableDubbo
    @SpringBootApplication
    public class ProviderServerApplication {
        public static void main(String[] args) {
            SpringApplication.run(ProviderServerApplication.class, args);
        }
    }
    

    10、消费端,需要引入服务端打包后的jar包,或者建一个和服务端一样路径(包名)和名称的接口,我用的是后者。

    package com.jay.service;
    import org.apache.dubbo.config.annotation.DubboReference;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    @RestController
    public class UserService {
        @DubboReference
        private BookService bookService;
        @GetMapping("/test")
        public String test() {
            return bookService.getBook();
        }
    }
    

     自动注入的bookService上面标注@DubboReference,说明他是要去指定的服务器中寻找的。
    保持zookeeper的zkServer.cmd和zkCli.cmd都是以管理员角色开着。
    运行服务端和消费端,访问消费端:http://localhost:9002/test,就会输出了。
    11、配置文件忘了说,补上
    服务端配置:四个配置,端口号、服务名称、服务注册地址和端口、服务扫描包名

    server.port=9001
    dubbo.application.name=provider-server
    dubbo.registry.address=zookeeper://127.0.0.1:2181
    dubbo.scan.base-packages=com.jay.service
    

    消费端配置:

    server.port=9002
    dubbo.application.name=consumer-server
    dubbo.registry.address=zookeeper://127.0.0.1:2181
    dubbo.scan.base-packages=com.jay.service
    

    结束,这只是最简单的一个例子,其他的我还没研究,谁研究的多,请留言告诉我一下,谢了。

  • 相关阅读:
    URLProtocol服务协议
    ODBC、OLEDB和ADO之间的关系 ,以及性能比较
    如何在VS2015查看C#界面窗体里的控件层次
    SpeechVoiceSpeakFlags枚举类型的详细解释
    SQL中遇到多条相同内容只取一条的最简单实现方法
    flink elasticsearch sink table 忽略部分字段开发
    flink elasticsearch source table 集成elasticsearch-hadoop connector开发
    记一次python 协程给合多线程死锁问题
    kubernetes gitlab runner java maven ci/cd 整体方案示例
    某云elasticsearch节点失效,手动重置primary,迁移分区
  • 原文地址:https://www.cnblogs.com/xsj1989/p/15152614.html
Copyright © 2011-2022 走看看