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

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

posted on 2021-08-17 15:41  邢帅杰  阅读(821)  评论(0编辑  收藏  举报