Dubbo学习

GitHub代码***************

集群和分布式

●集群: 一个业务模块,部署在多台服务器上。
●分布式: 一个大的业务系统,拆分为小的业务模块,分别部署在不同的机器上。

架构模式

SOA架构

在这里插入图片描述
SOA:(Service-Oriented Architecture,面向服务的架构)是一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和契约联系起来。
ESB:(Enterparise Servce Bus) 企业服务总线,服务中介。主要是提供了一个服务于服务之间的交互。ESB 包含的功能如:负载均衡,流量控制,加密处理,服务的监控,异常处理,监控告急等等。
分布式架构存在的问题:
服务提供方一旦产生变更,所有消费方都需要变更

微服务架构

微服务架构是在 SOA 上做的升华,微服务架构强调的一个重点是“业务需要彻底的组件化和服务化”,原有的单个业务系统会拆分为多个可以独立开发、设计、运行的小应用。这些小应用之间通过服务完成交互和集成。
微服务架构 = 80%的SOA服务架构思想 + 100%的组件化架构思想 + 80%的领域建模思想
在这里插入图片描述
特点:
服务实现组件化:开发者可以自由选择开发技术。也不需要协调其他团队
服务之间交互一般使用REST API
去中心化:每个微服务有自己私有的数据库持久化业务数据
自动化部署:把应用拆分成为一个一个独立的单个服务,方便自动化部署、测试、运维

Zookeeper安装

首先需要有一个CentOS-7的Linux系统(虚拟机)
在Linux系统内安装java7.0以上环境
然后安装zookeeper

1.首先安装java环境

可以用centeros7自带的系统安装java环境
具体有一些坑 比如虚拟机连接不上xshell参考解决地址:
https://jingyan.baidu.com/article/363872ec796dfc6e4ba16f09.html

2.安装zookeeper

首先在opt目录创建zookeeper文件夹
再在zookeeper文件夹创建zkdata文件夹(用于配制Zookeeper的数据目录)
直接用xshell把apache-zookeeper-3.5.6-bin.tar解压到
/opt/zookeeper(文件夹不存在自己创建)
需要配置两个地方
进入到/opt/zookeeper/apache-zookeeper-3.5.6-bin/conf目录
复制zoo_sample.cfg文件并改名为zoo.cfg再修改其dataDir属性值
修改为:
dataDir=/opt/zookeeper/zkdata (之前创建的放数据的目录)

启动zookeeper

进入zookeeper安装目录下的bin目录
执行 ./zkServer.sh start 语句
zookeeper就开始运行了
在这里插入图片描述
如果运行不来了 进入zookeeper的bin目录
运行以下命令

chmod a+xwr *:*

测试环境 记得关闭防火墙 命令:systemctl stop firewalld.service
启动成功

Dubbo快速入门

首先编写一个serevice模块写service功能 写好后打包
放入服务器 并且运行
web程序直接依赖这个包 然后访问对应的mapping
pom中一些必须要的坐标:

 <!--Dubbo的起步依赖,版本2.7之后统一为rg.apache.dubb -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
            <version>${dubbo.version}</version>
        </dependency>
        <!--ZooKeeper客户端实现 -->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>${zookeeper.version}</version>
        </dependency>
        <!--ZooKeeper客户端实现 -->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>${zookeeper.version}</version>
        </dependency>

服务提供者Service

1.在pom中改变打包的方式 改为war
2.需要更改service的实现类的注解
改为@Service
需要注意的是
这个注解是org.apache.dubbo.config.annotation.Service下的
3.更改applicationContext.xml中的配置 添加如下配置:

<!--dubbo配置-->
    <!--配置项目的名称 一般和项目名字相同-->
    <dubbo:application name="dubbo-service"/>
    <!--配置注册中心地址  这里用的是zookeeper-->
    <!--ip通过ip add命令查看  端口号通过查看zookeeper的安装目录下的
    /conf/zoo*.cfg的clientPort属性查看-->
    <dubbo:registry address="zookeeper://192.168.79.128:2181"/>
    <!--配置dubbo的注解扫描-->
    <dubbo:annotation package="com.itheima.service.Impl"/>

4.需要添加一个webapp/WEB-INF/web.xml文件在main目录下 xml配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         version="2.5">
	<!-- spring -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:spring/applicationContext*.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
</web-app>

服务消费者Servlet

1.需要远程注入的属性加上 @Reference

2.需要添加一个webapp/WEB-INF/web.xml文件在main目录下 xml配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         version="2.5">
	<!-- spring -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:spring/applicationContext*.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
</web-app>

提取公共接口

就是把消费者和提供者需要的函数提取出来
然后单独做成一个包
记得需要执行以下操作
在这里插入图片描述

Dubbo-Admin安装

1.首先需要安装Node.js和maven
2.然后下载Dubbo-Admin
3.然后修改
安装目录下\dubbo-admin-server\src\main\resources\application.properties
的文件配置 修改注册中心的地址即可
4.返回安装的根目录打开cmd窗口
5.执行mvn clean package 等待一会就可以完成打包
6.打包完成后进入 安装目录/dubbo-admin-distribution/targat 有一个dubbo的jar包
直接运行jar包就可以启动项目了
7.再进入安装目录\dubbo-admin-ui 打开cmd窗口 执行 npm run dev命令就可以启动前端工程了
8.如何访问 直接输入他提供的地址即可一般是 http://localhost:8081
在里面可以对自己的生产者提供的方法参数和服务提供测试等功能,非常实用

Dubbo高级特性

Dubbo序列化

这个Dubbo已经对序列化和反序列化进行了封装
我们要做的就是只需要实现Serializable 接口
然后定义一个公共的模块让提供者和消费者都去继承他就可以
再给需要这个pojo的项目添加依赖 然后安装这个项目就可以了

超时与重试

超时:
需要在这个Dubbo的专属注解上添加 timeout属性 用于控制超时时间 默认为1000ms
一般配置到提供方(service)
重试:
需要在这个Dubbo的专属注解上添加 retries属性 用于控制重试次数 默认为2次

多版本

灰度发布:当出现新功能时,会让一部分用户先使用新功能,用户反馈没问题时,再将所有用户迁移到新功能。
dubbo 中使用version 属性来设置和调用同一个接口的不同版本
使用方法 :
在提供方的@Service注解上添加version属性 值就是版本号
怎么调用对应的版本:
需要在消费方(WEB)的Dubbo专属注解(@Reference)上添加version属性
需要调用哪个版本,就写对应的Service上的version值
注意 如果提供者写了版本号 那么消费者也必须写 不然会出找不到版本异常

负载均衡

负载均衡策略(4种):
Random :按权重随机,默认值。按权重设置随机概率。
RoundRobin :按权重轮询。
LeastActive:最少活跃调用数,相同活跃数的随机。(看请求时间长短,选最短的使用)
ConsistentHash:一致性 Hash,相同参数的请求总是发到同一提供者。

怎么使用:

1.首先要在提供者
需要在Dubbo的Service注解上加上weight属性来设置权重数值越大越容易被执行
多台机器之间端口不能有冲突
就需要配置:
pom.xml 里面的tomcat的插件 修改端口号

applicationContext.xml里面的修改项为:

  <!--修改端口-->
    <dubbo:protocol path="20882"/>
    <!--dubbo配置-->

    <!--配置项目的名称 一般和项目名字相同-->
    <dubbo:application name="dubbo-service">
        <!--修改value-->
        <dubbo:parameter key="qos.port" value="55555"/>
    </dubbo:application>

2.在消费者的注入注解上添加 loadbalance 属性 值为上面的几种属性字符串 全字母小写

集群容错

集群容错模式:
Failover Cluster:失败重试。默认值。当出现失败,重试其它服务器 ,默认重试2次,使用 retries 配置。一般用于读操作
Failfast Cluster :快速失败,只发起一次调用,失败立即报错。通常用于写操作。
Failsafe Cluster :失败安全,出现异常时,直接忽略。返回一个空结果。
Failback Cluster :失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。
Forking Cluster :并行调用多个服务器,只要一个成功即返回。
Broadcast Cluster :广播调用所有提供者,逐个调用,任意一台报错则报错。

怎么使用:
在Dubbo的@Reference属性上添加cluster属性 值为上面的首个单词字母全小写

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值