Dubbo学习笔记

摘要:
--引入dubbo--˃com.alibabadubbo2.6.2˂!

1 dubbo的 作用
以下内容摘自dubbo官网:
dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现;

2 查看官网大坑

(二)dubbo管理控制台的搭建

git clone https://github.com/apache/incubator-dubbo-ops

cd incubator-dubbo-ops && mvn package

用法,分为三个 admin, register/ monitor
dubbo admin
Dubbo admin is a spring boot application, you can start it with fat jar or in IDE directly.

进入 dubbo-admin,执行 mvn install
-----------------------------
maven 下载打包时需要配置 仓库MAVEN_HOME,Path=xxxxxj,这样的话就会用配置的阿里云镜像,下载会很快
碰到了不能编译,需要配置java环境变量
编译后启动报错了,因为没改zookeeper的配置ip,重新安装打包,运行target下的 java -jar dubbo-xxxxxx.jar,账号参考配置里的 root/root 或者 guest/xxxx,端口查看配置 时 7001

Dubbo学习笔记第1张

dubbo monitor and dubbo registry
You can get a release of dubbo monitor in two steps:

Step 1:
git clone https://github.com/apache/incubator-dubbo-ops
Step 2:
cd incubator-dubbo-ops && mvn package
Then you will find:

dubbo-monitor-simple-2.0.0-assembly.tar.gz in incubator-dubbo-opsdubbo-monitor-simple arget directory. Unzip it you will find the shell scripts for starting or stopping monitor.
dubbo-registry-simple-2.0.0-assembly.tar.gz in incubator-dubbo-opsdubbo-registry-simple arget directory. Unzip it you will find the shell scripts for starting or stopping registry.

Dubbo学习笔记第2张

2 然后时健康检测项目,打包,改zookeeperip,解压生成的 target下的 xxx.gz,进入 assembly.bin,运行start.bat即可

F:programmedubbo-admin-masterdubbo-monitor-simple argetdubbo-monitor-simple-2.0.0assembly.bin

Dubbo学习笔记第3张

bat启动文件

f:
cd F:programmedubbo-admin-masterdubbo-admin arget
java -jar dubbo-admin-0.0.1-SNAPSHOT.jar

f:
cd F:programmedubbo-admin-masterdubbo-monitor-simple argetdubbo-monitor-simple-2.0.0assembly.bin
start.bat

4 自动生成 serializable 方法的配置再idea中

Dubbo学习笔记第4张

4 真实的 测试dubbo的例子

Dubbo学习笔记第5张

/**
 * 订单服务相关接口
 */
public interfaceOrderService {
    
    /**
     * 初始化订单
     * @param userId
     */List<User>initOrder(String userId);

}


public interfaceUserService {

    /**
     * 获取用户信息
     * @param userId
     * @return
     */List<User>getUserList(String userId);
    List<User>getUserAddressList(String userId);
}


user-service-provider
     <dependency>
            <groupId>com.darling.dubboDemo</groupId>
            <artifactId>pub-interfence</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

            <!-- 引入dubbo -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.6.2</version>
        </dependency>
        <!-- 注册中心使用的是zookeeper,引入操作zookeeper的客户端端 -->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>2.12.0</version>
        </dependency>



packagecom.provider.userserviceprovider.service;

importcom.pubinter.pubinterface.dao.UserService;
importcom.pubinter.pubinterface.pojo.User;

importjava.util.ArrayList;
importjava.util.List;

public class UserServiceImpl implementsUserService {


    public List<User>getUserAddressList(String userId) {
        List<User> list = newArrayList();
        list.add(new User(3,"韦德",36,"迈阿密"));
        list.add(new User(23,"詹姆斯",34,"洛杉矶"));
        list.add(new User(24,"科比",39,"洛杉矶"));
        returnlist;
    }

    @Override
    public List<User>getUserList(String userId) {
        return null;
    }
}


<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"xmlns="http://www.springframework.org/schema/beans"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
       http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">

    <!-- 当前服务的名称 -->
    <dubbo:application name="user-service-provider"/>

    <!-- 注册中心的地址 这里注册中心用的是zookeeper -->
    <dubbo:registry protocol="zookeeper" address="148.70.4.44:2181"/>

    <!-- 指定通信规则(通信协议?通信端口) -->
    <dubbo:protocol name="dubbo" port="20883"></dubbo:protocol>

    <!-- 需要暴露的服务 -->
    <dubbo:service interface="com.pubinter.pubinterface.dao.UserService" ref="userService" version="1.0.0"/>

    <!-- 需要暴露的服务的实现类 -->
    <bean    />

    <!-- 监控中心协议,如果为protocol="registry",表示从注册中心发现监控中心地址,否则直连监控中心 -->
    <dubbo:monitor protocol="registry"></dubbo:monitor>

    <!--timeout:超时时间配置
        retries:重试次数配置(超时报错后重试连接的次数,不含第一次调用,如果目标服务有多个重试的时候会自动切换别的服务)
     -->
    <dubbo:provider timeout="2000" retries="6"></dubbo:provider>
</beans>


public classTestProviderDemo {

    public static void main(String[] args) throwsIOException {
        // 加载配置文件
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("provider.xml");
        // 容器启动
applicationContext.start();
        // 使程序阻塞(由于是单元测试,如果程序跑完了我们再dubbo控制台看不到效果)
System.in.read();
    }
}


不启用spring boot 主类,因为没必要,只启动了这个一个配置文件
order-service-consumer

      <!-- 引入公共接口层的依赖 -->
        <dependency>
            <groupId>com.darling.dubboDemo</groupId>
            <artifactId>pub-interfence</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!-- 引入dubbo -->
        <!-- https://mvnrepository.com/artifact/com.alibaba/dubbo -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.6.2</version>
        </dependency>
        <!-- 注册中心使用的是zookeeper,引入操作zookeeper的客户端端 -->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>2.12.0</version>
        </dependency>


    /**
 *   @author 董琳琳
 *   @date 2018/9/14 11:50
 *   @description   订单服务的实现类
 */@Service
public class OrderServiceImpl implementsOrderService {

    @Autowired
    UserService userService;

    /**
     * 初始化订单并调用用户服务的接口
     * @param userId
     * @return
     */@Override
    public List<User>initOrder(String userId) {
        returnuserService.getUserAddressList(userId);
    }
}


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
        http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd
        http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
    <!-- 开启springmvc的包扫描 -->
    <context:component-scan base-package="com.order.orderserviceconsumer"></context:component-scan>
    <!-- 当前服务的名称 -->
    <dubbo:application name="order-service-consumer"/>

    <!-- 注册中心的地址 这里注册中心用的是zookeeper -->
    <dubbo:registry protocol="zookeeper" address="148.70.4.44:2181"/>

    <!-- 声明需要调用的远程服务的接口;生成远程服务代理 -->
    <dubbo:reference   check="false" interface="com.pubinter.pubinterface.dao.UserService" version="*"/>

    <!-- 监控中心协议,如果为protocol="registry",表示从注册中心发现监控中心地址,否则直连监控中心 -->
    <dubbo:monitor protocol="registry"></dubbo:monitor>
</beans>user必须实现serializable接口


必须要加扫描路径,不然会出错,找不到类
    <context:component-scan base-package="com.darling.order"></context:component-scan>

/**
 *   @author 董琳琳
 *   @date 2018/9/14 15:57
 *   @description 测试服务调用者是否成功从注册中心订阅服务
 */
public classTestConsumerDemo {
    public static void main(String[] args) throwsIOException {
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("consumer.xml");
        OrderService service = applicationContext.getBean(OrderService.class);
        List<User> list = service.initOrder("1");
        for(User user:list) {
            System.out.println(user.toString());
        }
        System.in.read();
    }
}


importjava.io.Serializable;

public class User implementsSerializable {
    private static final long serialVersionUID = -2844400681715908324L;
    private intage;
    privateString name;
    privateString address;
    private intnumber;
    User(){};
    public User(int age,String name,intnumber,String address){
        this.address=address;
        this.age=age;
        this.number=number;
        this.name=name;
    }

    public intgetAge() {
        returnage;
    }

    public void setAge(intage) {
        this.age =age;
    }

    publicString getName() {
        returnname;
    }

    public voidsetName(String name) {
        this.name =name;
    }

    publicString getAddress() {
        returnaddress;
    }

    public voidsetAddress(String address) {
        this.address =address;
    }

    public intgetNumber() {
        returnnumber;
    }

    public void setNumber(intnumber) {
        this.number =number;
    }
}

大概流程是,public 接口,有两个,一个user 类,需要实现serializable接口和 set get方法,第二个项目provider引入公共的刚才的想pub,进行生产者配置,第三个消费者配置,兜售ideal 项目的module方式,

最终的效果是

Dubbo学习笔记第6张

5 dubbo 2.5版本 telnet命令

默认是 22222,可用通过 dubbo.properties修改为
dubbo.application.qos.port=33333
或启动时修改
-Ddubbo.application.qos.port=33333
安全方面 ,谁都可以访问,可以关闭,这样远程的就不可访问
dubbo.application.qos.accept.foreign.ip=false

举例
telnet localhost 22222
接口方式访问

curl "localhost:22222/ls?arg1=xxx&arg2=xxxx"

常用命令:
ls 可查看producer和consumer两个角色信息
online 上线所有的服务,可以正则
online xxx.com 上线某种服务
需要下线后重新上线时采用的场景

下线命令
offline 和 online 用法一样
help 查看帮助,这个很简单 telnet 功能,默认系统配置

-Ddubbo.application.qos.enable=true
-Ddubbo.application.qos.port=33333
-Ddubbo.application.qos.accept.foreign.ip=false

1 docker 使用Dockerfile 构建镜像
例子 只两行
FROM nginx
RUN echo 'abc' > /usr/nginx/index.html

from指定从nginx作为基础版本
run 是执行 linux命令

内容两行

执行一条命令 构建
docker build -他nginx:my .

在当前路径构建,点是当前路径,后面的是名字

执行一条命令运行
docker -d -p 11:80

浏览器打开 xxx:11 结果是自己写的命令输入的内容,所以自己的 镜像构建成功了

docker 的命令15个太多了

2 使用maven 插件打包发布程序为新 镜像分三步,1 是 加maven依赖 配置,
包括了 imagename镜像名 ,包括了 仓库名,镜像名,标签用冒号,2 entrypoint 表示执行的命令
baseimage 就是 from 基于java的 都是
同时引入了 resource.resource.include 表示引入了 拷贝xxx.jar
第二步是 构建,第三步是 运行,就可以查看到了 镜像和容器

Dubbo学习笔记第7张

Dubbo学习笔记第8张

3 然后更加专业的写法,baseimage和 enpoint 都不在pom里,而在 Dockerfile文件里,在 pom只指定一个目录就行了,这样是生产环境专业的写法

Dubbo学习笔记第9张

4 最终 自己建立的docker 镜像 会推送到 docker hub中,或者是个人仓库中,

可以用maven也可以用push命令,push命令还没有用过,下面例子是maven:

如果是 hub中心则 在maven的server 中配置 id,hub的 用户名,hub的密码

也可以私有镜像,但需要 baseImage中设置 localhost:5000 xxxxxxxxx

免责声明:文章转载自《Dubbo学习笔记》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇len()函数警惕VPS服务商常用的超售手段下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

zookeeper客户端命令行查看dubbo服务的生产者和消费者

假设zookeeper安装在192.168.5.130这台服务器上,现在我们通过命令行查看dubbo在zookeeper注册服务的生产者和消费者信息 首先通过命令切换到/usr/zookeeper-3.4.10/bin目录,然后输入 ./zkCli.sh -server 192.168.5.130:2888 (2888为zookeeper在服务器上提供服务...

Dubbo-URL、数据包结构

  一、Dubbo中的URL 一个标准的 URL 格式至多可以包含如下的几个部分 protocol://username:password@host:port/path?key=value&key=value    在 dubbo 中,也使用了类似的 URL,主要用于在各个扩展点之间传递数据,组成此 URL 对象的具体参数如下: protocol...

dubbo的配置文件

1、<dubbo:service/> #用于服务提供方暴露服务位置 <debbo:service/> 2、<debbo:service/> 参数 解释 interface 提供服务的接口 ref 真正的服务实现类 group   version 服务的版本 registry 指定使用的注册中心...

Dubbo 3.0 前瞻:重塑 Spring Cloud 服务治理

作者 | 小马哥 导读:Dubbo 社区策划了【Dubbo 云原生之路】系列文章,和大家一起回顾 Apache Dubbo 产品和社区的发展,并展望未来发展。系列文章主要涵盖 Dubbo 技术解读、社区运营、应用案例解析三大部分。本文为系列第 3 篇。 前言 在 Java 微服务生态中,Spring Cloud 成为了开发人员的首选技术栈,然而随着实践的...

RPC 超时设置 分析 转

出处:RPC 超时设置   上面这张监控图,对于服务端的研发同学来说再熟悉不过了。在日常的系统维护中,『服务超时』应该属于监控报警最多的一类问题。   尤其在微服务架构下,一次请求可能要经过一条很长的链路,跨多个服务调用后才能返回结果。当服务超时发生时,研发同学往往要抽丝剥茧般去分析自身系统的性能以及依赖服务的性能,这也是为什么服务超时相对于服务出错和服...

dubbo-常用配置

一、启动时检查 官网说明: Dubbo 缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止 Spring 初始化完成,以便上线时,能及早发现问题,默认 check="true"。 可以通过 check="false" 关闭检查,比如,测试时,有些服务不关心,或者出现了循环依赖,必须有一方先启动。 另外,如果你的 Spring 容器是懒加载的,或...