dubbo搭建+zookeeper+springboot

  1. Dubbo
    1. Dubbo简介

Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求,并且本质上是个服务调用的东东,说白了就是个远程服务调用的分布式框架(告别Web Service模式中的WSdl,以服务者与消费者的方式在dubbo上注册)

其核心部分包含:

1. 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。

2. 集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。

3. 自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

    1. Dubbo作用(优缺点)

优点:

  1. 透明化的远程方法调用

像调用本地方法一样调用远程方法;只需简单配置,没有任何API侵入。

软负载均衡及容错机制

  1. 可在内网替代nginx lvs等硬件负载均衡器。

服务注册中心自动注册 & 配置管理

不需要写死服务提供者地址,注册中心基于接口名自动查询提供者ip。

使用类似zookeeper等分布式协调服务作为服务注册中心,可以将绝大部分项目配置移 入zookeeper集群。

  1. 服务接口监控与治理

Dubbo-admin与Dubbo-monitor提供了完善的服务接口管理与监控功能,针对不同应用 的不同接口,可以进行 多版本,多协议,多注册中心管理。

缺点:

  1. 难度较大,架构维护起来也不是很方便。
  2. dubbo的开发难度较大,原因是dubbo的jar包依赖问题很多大型工程无法解决
    1. Dubbo架构

dubbo架构图如下所示:

 

节点角色说明:

       Provider: 暴露服务的服务提供方。

 

       Consumer: 调用远程服务的服务消费方。

 

       Registry: 服务注册与发现的注册中心。

 

       Monitor: 统计服务的调用次调和调用时间的监控中心。

 

       Container: 服务运行容器。

 

调用关系说明:

0 服务容器负责启动,加载,运行服务提供者。

1. 服务提供者在启动时,向注册中心注册自己提供的服务。

2. 服务消费者在启动时,向注册中心订阅自己所需的服务。

3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。

4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。

5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

 

  1. Dubbo环境搭建

所需工具:

jdk1_7.tar.gz

zookeeper-3.4.10.tar.gz

apache-tomcat-8.0.53.tar.gz

dubbo-admin-2.5.10.war(此文件不需解压)

 

以上文件下载需根据自己的电脑系统下载相对匹配的文件 我这里用的均是64位

  1. 安装jdk,配置环境变量。

安装成功后输入java -version 可以查看到jdk信息

  1. 安装zookeeper(单机模式)

A,将安装包zookeeper-3.4.10.tar.gz上传至服务器,进入所在目录,输入命令 tar -zxvf zookeeper-3.4.10.tar.gz   进行解压

B,进入zookeeper新建data与logs目录用于保存zookeeper日志信息

  1. 进入conf,复制一份zoo_sample.cfg并修改其名称为zoo.cfg,配置zoo.cfg文件

在data目录中添加myid文件

可以直接

cd data

vim myid

 

 

#之后会产生一个新文件,直接在里面写 X 即可

 

#比如我配置的三个server,myid里面写的X就是server.X=ip:2888:3888 中ip所对应的X

 server.0=192.168.192.128:2888:3888【192.168.192.128服务器上面的myid填写0】

 server.1=192.168.192.129:2888:3888【192.168.192.129服务器上面的myid填写1】

 server.2=192.168.192.130:2888:3888【192.168.192.130服务器上面的myid填写2】

 

配置文件中参数说明:

tickTime : 服务器与客户端之间交互的基本时间单元(ms)

initLimit:initLimit和leader之间最长心跳时间,设置的是10那么就是tickTime的10陪,即2000毫秒*10=20000毫秒=20秒

syncLimit:leader和follower之间发送消息, 请求和应答的最大时间长度. 此时该参数设置为5, 说明时间限制为5倍tickTime, 即2000毫秒*5=10000毫秒=10秒

dataDir : 保存zookeeper数据路径

dataLogDir : 保存zookeeper的日志路径,当此配置不存在时默认路径与dataDir一致

clientPort : 客户端访问zookeeper时经过服务器端时的端口号

maxClientCnxns:这个操作将限制连接到 ZooKeeper 的客户端的数量,限制并发连接的数量,它通过 IP 来区分不同的客户端。此配置选项可以用来阻止某些类别的 Dos ***。将它设置为 0 或者忽略而不进行设置将会取消对并发连接的限制。

  1. 环境变量设置

为了方便运行zkServer.sh 脚本,我们将zookeeper 的bin 路径加入到/etc/profile 中,

作为一个全局变量进行输出到PATH 中,记得修改完成之后运行source /etc/profile 使修

改生效

export ZOO_HOME=/home/sms/zhupy/zookeeper-3.4.10

export PATH=$PATH:$ZOOKEEPER_HOME/bin:$ZOO_HOME/conf

  1. 启动运行

进入zookeeper的bin目录,使用配置的zoo.gfh启动。

输入命令

启动zookeeper:./zkServer.sh start
停止zookeeper: ./zkServer.sh stop
查看状态: ./zkServer.sh status

 

说明启动成功

 

用zookeeper客户端连接:
zookeeper 客户端:zkCli.sh -server [IP]:12182 #[IP]为zookeeper 服务的IP 地址

输入命令ll查看命令行

客户端命令详解查看:https://blog.csdn.net/xyang81/article/details/53053642

 

集群模式搭建可参考:https://blog.csdn.net/qq_27739989/article/details/78108351

 

3.安装配置dubbo-admin

A.获取dubbo-admin.war包,可自己在csdn下载或者自己去下载源码打包

下载地址https://github.com/apache/incubator-dubbo/releases

下载下来是这样的一个目录结构:

但是这里我们只关心dubbo-admin这个文件夹。
其实下面所谓配置的目的就是为了得到war包,war包网上也有,但是下载了很多下来都会有问题,原因可能是每个人的电脑jdk版本或其他环境不一样,因此我们自己打包一个war就好。打包war包,进入dubbo-admin这个文件目录 运行命令:

mvn package -Dmaven.skip.test=true

如果看到如下结果,说明打包成功了:

打包过程中可能会有报错,好像是jar包不兼容造成的,拿着报错信息,直接百度就行。
打包成功后,会看到如下文件

  1. 配置tomcat启动dubbo-admin

将tomcat安装包上传至服务器解压,修改conf目录下的server.xml文件中的端口。端口不要冲突就好。将war包放入tomcat的webapps下启动tomcat即可

启动tomcat命令:./startup.sh (进入bin目录下)

关闭tomcat:./shutdown.sh

启动成功后可看到war包被解压了多出了dubbo-admin目录

修改配置dubbo.properties文件 然后重启tomcat

#zk地址和端口

dubbo.registry.address=zookeeper://127.0.0.1:2180

#root帐号和密码

dubbo.admin.root.password=root

#guest帐号和密码

dubbo.admin.guest.password=guest

 

 

C.访问dubbo

 

dubbo版本号

依次点击系统管理---dubbo管理,在弹出的界面中能看到dubbo的版本号,这个版本号并不是zookeeper的版本,也不是dubbo-admin的版本,而是开发人员使用的dubbo的jar的版本号(项目中引用的jar)

系统快照

依次点击系统管理--->系统快照,在弹出页面中能看到【没有提供者 服务 提供者 消费者】 
分别是【没有提供者的消费者个数,服务个数,提供者个数,消费者个数】点击后面对应的属性个数,能看到详细信息

系统状态

系统日志

依次点击系统管理--->系统日志,在弹出页面能看到日志,要想时时的看 需要不断刷新页面。可以修改日志级别,进行观看。也可以搜关键字进行查找日志

系统环境

依次点击系统管理--->系统环境,在弹出的页面能看到系统信息

  1. Dubbo代码案例
  1. Springboot+dubbo

新建springboot项目

springboot-dubbo  生产者

spring-boot-consumer 消费者

springboot-api  实体类及需要暴露的接口

 

生产者:springboot-dubbo

1.Pom.xml

项目依赖这一块主要使用到了基本的Spring-Boot 依赖,然后我们需要额外引入Dubbo 与Zookeeper的依赖


<dependency>
   <groupId>io.dubbo.springboot</groupId>
   <artifactId>spring-boot-starter-dubbo</artifactId>
   <version>1.0.0</version>
</dependency>
<dependency>
   <groupId>org.apache.zookeeper</groupId>
   <artifactId>zookeeper</artifactId>
   <version>3.4.6</version>
</dependency>

<dependency>
   <groupId>com.zpy</groupId>
   <artifactId>springboot-api</artifactId>
   <version>0.0.1-SNAPSHOT</version>
</dependency>

 

2.配置文件

由于我们底层使用的是Spring-Boot 进行开发,那么我们就应该善于利用Spring-Boot 给我们带来的优势,因此我们可以直接在Application.properties 文件中配置Dubbo 服务:

#端口号
server.port=8082
## Dubbo 服务提供者配置
#--服务名称
spring.dubbo.application.name=provider
#-- 注册中心地址
spring.dubbo.registry.address=zookeeper://192.168.150.233:2180
# -- dubbo 协议
spring.dubbo.protocol.name=dubbo

spring.dubbo.protocol.port=20880
#--声明需要暴露的服务接口
spring.dubbo.scan=com.zpy.service

#注册中心连接超时时间
#spring.dubbo.application.registries.timeout=10000

#spring.dubbo.application.registries.session=100000

3.服务提供

在服务提供主要包括两部分,一个是暴露服务,一个是服务实现

暴露服务:即我们平常开发中所使用的的接口,这里我们springboot-api项目中service创建一个 ColorService的接口,主要包括一个保存颜色的方法。

import com.zpy.domain.Color;

/**
 * Created by Administrator on 2018/8/14.
 */
public interface ColorService {

    Color saveColor(Color c);

}

服务实现:服务实现,与我们平常的服务一样,对接口进行实现,比较特别的是,我们这里需要使用到Dubbo 的 @Service 注解

springboot-dubbo项目中实现springboot-ap定义的ColorService 接口

import com.alibaba.dubbo.config.annotation.Service;
import com.zpy.domain.Color;
import com.zpy.service.ColorService;

/**
 * Created by Administrator on 2018/8/14.
 */
@Service
public class ColorServiceImpl implements ColorService {
    @Override
    public Color saveColor(Color color) {

        color.setId("a");
        System.out.println(color.toString());

        return color;
    }
}

消费者:spring-boot-consumer

1.消费者的相关依赖,与生产者的依赖一致。

<dependency>
   <groupId>io.dubbo.springboot</groupId>
   <artifactId>spring-boot-starter-dubbo</artifactId>
   <version>1.0.0</version>
</dependency>
<dependency>
   <groupId>org.apache.zookeeper</groupId>
   <artifactId>zookeeper</artifactId>
   <version>3.4.6</version>
</dependency>

<dependency>
   <groupId>com.zpy</groupId>
   <artifactId>springboot-api</artifactId>
   <version>0.0.1-SNAPSHOT</version>
</dependency>

2.配置文件:

配置文件与生产者稍有区别:

## 避免和 server 工程端口冲突
server.port=8081

## Dubbo 服务消费者配置
spring.dubbo.application.name=consumer
#注册中心地址
spring.dubbo.registry.address=zookeeper://192.168.150.233:2180
#引用生产者服务接口的类所在的包
spring.dubbo.scan=com.zpy.service

3.服务实现

例如,在这里我们需要使用到生产者中的 saveColor(Color color) 方法,则需要创建一个接口,然后再调用时,使用 @Reference 注解进行引用:

i

import com.alibaba.dubbo.config.annotation.Reference;
import com.zpy.domain.Color;
import org.springframework.stereotype.Component;

/**
 * Created by Administrator on 2018/8/14.
 */
@Component
public class CsService{

    @Reference
    ColorService colorService;


    public Color saveColor(String str) {
        Color color = new Color();
        color.setName(str);
        color.setDes(str);
        color.setTt(str);

        return colorService.saveColor(color);
    }

}

创建一个测试的controller,调用csservice

i

import com.zpy.service.CsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * Created by Administrator on 2018/8/14.
 */
@RestController
public class ColorController {

    @Autowired
    CsService csService;

    @RequestMapping("/save")
    public Object saveUser(String str) {

        return csService.saveColor(str);
    }
}

先启动生产者,然后启动消费者

 

在dubbo中可以看到生产者和消费者接口接口状态

 

 

消费者接口

 

 

通过浏览器访问消费者controller可以看到以下信息

生产者输出打印信息

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值