Spring Boot----Dubbo

概述

治理和维护各个分系统

参考官网:http://dubbo.apache.org/zh-cn/docs/user/references/registry/introduction.html (可中英文切换)

 

下载安装Zookeeper

linux

  使用docker部署

windows: 参考(https://blog.csdn.net/ring300/article/details/80446918),下载的zookeeper目录中需要包含lib(内置jar包,否则需要自己导入)

  1、将conf目录下的zoo_sample.cfg文件,复制粘贴一份,重命名为zoo.cfg

  2、创建data目录和log目录

  3、修改zoo.cfg 文件中的

dataDir=D:\Zookeeper\data
datalogDir=D:\Zookeeper\log

  4、启动 双击 zkServer.cmd

对zoo.cfg文件配置说明

  tickTime:这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。

  initLimit:这个配置项是用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接

时最长能忍受多少个心跳时间间隔数。当已经超过 10 个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是

10*2000=20 秒

  syncLimit:这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 5*2000=10 秒

  dataDir:顾名思义就是 Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。

  clientPort:这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。

 

搭建Dubbo Admin

源码下载:https://github.com/apache/dubbo-admin/tree/master(注意是master分支,dubbo admin好像在重构)

具体操作请看官方文档。

修改 dubbo-admin-master\dubbo-admin\src\main\resources\application.properties中的Zookeeper地
cd dubbo-admin-master\dubbo-admin
mvn clean package :将所有模块进行打包
cd  target
java -jar dubbo-admin-0.0.1-SNAPSHOT.jar

访问:localhost:7001  密码和用户名都是root

 

搭建Dubbo Monitor

在搭建dubbo admin是下载的文件夹中有一个dubbo-monitor-simple(一个建档的监控信息配置)

cd  dubbo-admin-master\dubbo-monitor-simple
mvn clean package
cd target
解压 dubbo-monitor-simple-2.0.0-assembly.tar.gz
修改 \dubbo-monitor-simple-2.0.0\conf\dubbo.properties (修改zookeeper地址等)
cd assembly.bin
双击 start.bat

需要配置application.yml:参考  http://dubbo.apache.org/en-us/docs/user/references/xml/dubbo-monitor.html

使用是整个demo测试正常,但是monitor使用不成功,查看日志:java.lang.ClassNotFoundException: org.apache.dubbo.common.URL(未解决),后来查看日志没有报错了,但是还是不成功

 

 

1、Dubbo一些基本使用

注意问题:测试的时候,如果provider修改了,consumer服务器有时候也需要重启,不知道为什么?

1.1 Dubbo 启动配置的加载顺序

JVM -D参数 > xml > properties

参考:http://dubbo.apache.org/zh-cn/docs/user/configuration/properties.html

1.2 超时,配置覆盖规则

参考:http://dubbo.apache.org/zh-cn/docs/user/configuration/xml.html (不同粒度之间的覆盖关系)

1.3 Dubbo 启动时检测配置

参考;http://dubbo.apache.org/zh-cn/docs/user/demos/preflight-check.html

dubbo 缺省配置:http://dubbo.apache.org/zh-cn/docs/user/references/xml/dubbo-consumer.html

1.4 重试次数

注意幂等请求可以设置重试,非幂等不能设置重试

参考:http://dubbo.apache.org/zh-cn/docs/user/references/xml/dubbo-consumer.html

1.5 关于xml

http://dubbo.apache.org/zh-cn/docs/user/configuration/properties.html

1.6 关于配置

可以使用dubbo.xml,application.properties,也可以使用注解@Service(version="xx",timeout=1)。。

1.7  多版本

一个 provider 接口被多个实现类实现

服务提供者实现多个版本的实现

@Service(version = "0.0.1")
public class UserServiceImpl implements ProviderService{}

服务消费者指定版本

@Reference(version = "0.0.2")
ProviderService providerService;

1.8 本地存根

1、对于consumer,需要调用providerService

@Reference(version = "0.0.2")
ProviderService providerService;

2、我们需要在创建ProviderService接口的实现类

public class ProviderServiceStub implements ProviderService {@ReferenceProviderService providerService;//必须创建一个有参构造器//providerService 传入的远程代理对象public ProviderServiceStub(ProviderService providerService) {this.providerService = providerService;}@Overridepublic String providerMethod() {if (false){System.out.println("true");String s = providerService.providerMethod();return s;}System.out.println("false");return "空";}
}

3 修改 @Reference

@Reference(version = "0.0.2",stub = "com.zy.dubbo.service.Impl.ProviderServiceStub")
ProviderService providerService;

xml的配置可以参考官方文档:http://dubbo.apache.org/zh-cn/docs/user/demos/local-stub.html

1.8 Dubbo的 @EnableDubbo的作用

主要目的就是进行包扫描的,扫描所有的 org.apache.dubbo.config.annotation.Service;

@EnableDubbo(scanBasePackages="com.zy.dubbo.service.Impl")可以指定具体的包扫描

1.9 springboot 使用xml配置dubbo

只需要使用 @ImportResource(value = {"classpath:provider.xml"}) 加载springboot启动类上,之前的所有的注解@Service,@EnableDubbo,@Reference,全部通过xml配置。

1.10 springboot 使用API配置dubbo

单单使用注解的方式,对于Dubbo:method 不方便操作。所以我们也可以采用使用注解加API结合的模式配合dubbo

官网文档:http://dubbo.apache.org/zh-cn/docs/user/configuration/api.html

如果配置了 public ServiceConfig<ProviderService> serviceConfig(ProviderService providerServiceImpl){},表示往注册中心注册了一个服务,所以不需要使用@EnableDubbo和@Service

以提供者配置为例

@Configuration
public class DubboConfig {@Beanpublic ApplicationConfig applicationConfig(){ApplicationConfig application = new ApplicationConfig();application.setName("provider");return application;}@Beanpublic RegistryConfig registryConfig(){RegistryConfig registryConfig = new RegistryConfig();registryConfig.setAddress("zookeeper://localhost:2181");return registryConfig;}@Beanpublic MonitorConfig monitorConfig(){MonitorConfig monitorConfig = new MonitorConfig();monitorConfig.setProtocol("registry");return monitorConfig;}//暴露单个服务,对于ProviderServiceImpl,spring会自动从容器中拿,(可以是实现类,也可以是接口,测试的时候,如果有多个接口实现类且加上@Component// 会选择其中一个实现类,所以最好使用实现类)//注解中的 @Service@Beanpublic ServiceConfig<ProviderService> serviceConfig(ProviderServiceImpl02 providerServiceImpl){ServiceConfig<ProviderService> serviceConfig = new ServiceConfig<>();serviceConfig.setInterface(ProviderService.class);serviceConfig.setRef(providerServiceImpl);serviceConfig.setVersion("0.0.3");List<MethodConfig> methods = new ArrayList<MethodConfig>();MethodConfig method = new MethodConfig();method.setName("providerMethod");method.setTimeout(3000);method.setRetries(0);methods.add(method);serviceConfig.setMethods(methods);serviceConfig.setApplication(applicationConfig());serviceConfig.setRegistry(registryConfig());serviceConfig.export();return serviceConfig;};
}

但是如果使用API配置额外需要使用注解往注册中心注册服务,我们就需要@EnableDubbo和@Service来注册服务了,此时我们注册中心就会有三个服务,并且版本0.0.3的providerMethod还设置了超时

@Service(version = "0.0.1")
@Component
public class ProviderServiceImpl implements ProviderService {@Overridepublic String  providerMethod(){System.out.println("消费者提供服务成功");return "0.0.1";}
}
------------------------------------------------------------------
@Service(version = "0.0.2")
@Component
public class ProviderServiceImpl02 implements ProviderService {@Overridepublic String  providerMethod() {System.out.println("消费者提供服务成功2");return "0.0.2";}
}

1.11 Dubbo 高可用

如果Zookeeper宕机了,如果服务之间之前访问过,会在本地创建缓存通讯,即使zookeeper宕机了,服务之间既然能够访问,原因在于dubbo可以直连

所以即使没有注册中心,服务之间依然可以相互通讯

可以测试

@Reference(url = "localhost:20881")

1.12 dubbo负载均衡

官方文档:http://dubbo.apache.org/zh-cn/docs/user/demos/loadbalance.html

随机算法(基于权重) Random LoadBalance

轮询算法   RoundRobin LoadBalance

最少活跃数算法:LeastActive LoadBalance(每次调用服务器后在本地有对应的响应时间,下次调用选择一个最少调用时间的服务器,进行请求)

一致性hash算法:ConsistentHash LoadBalance(比如请求带了一个id=1,1进行hash算法获得一个值,通过这个值,来选择服务器进行请求)

dubbo默认基于随机(基于权重)负载均衡机制,

可以默认指定 @Service(version = "0.0.1",weight = 100)

可以动态的进行权重加减

 

 

 

1.13 服务降级和容错

一个服务器需要来处理需要的服务请求,有一些请求不是很重要重要,但是依然需要服务器耗费资源来处理请求,此时的其他请求处理就很慢,此时如果大量请求来调用一些重要服务,我们就需要关闭某些不重要的服务,来减少服务器压力。

我们可以屏蔽功能:屏蔽(恢复)消费者调用服务提供者,请求不会到达服务器,服务器不会处理请求,减少服务器压力

我们可以容错功能:请求会到提供者,当提供者处理请求出错了,直接返回null,消费者不抛出异常

1.14 集群容错模式

简单实用可以参考:http://dubbo.apache.org/zh-cn/docs/user/demos/fault-tolerent-strategy.html

实际开发需要整合hystrix

使用方法1:(测试过程中会发生容错时而容错不起作用,发送大量请求,某几次依然会报错(后来发现在fallback方法中出现的错误))

1、在提供者配置

使用@HystrixCommand注解方法,并在启动类上加上注解 @EnableHystrix,但是实际测试过程过不需要这些配置

    @HystrixCommand@Overridepublic String  providerMethod(){System.out.println("提供服务成功");return "0.0.1";}

2、消费者配置,并在启动类上加上@EnableHystrix

    @HystrixCommand(fallbackMethod = "testfallback")@Overridepublic String  test() {String s = providerService.providerMethod();return s;}public String  testfallback() {System.out.println("testfallback");return "错误了....";}

使用方法2:(测试过程中正常)

消费者不用任何配置

提供者配置 @HystrixCommand,并在启动类上加上@EnableHystrix

    @HystrixCommand(fallbackMethod = "providerMethodFallback")@Overridepublic String  providerMethod() {System.out.println("消费者提供服务成功2");if(Math.random()>0.5){System.out.println(">0.5");int a = 1/0;}return "0.0.2";}public String  providerMethodFallback(){System.out.println("提供者出错了....");return "提供者出错了....";}

  

 

转载于:https://www.cnblogs.com/yanxiaoge/p/11441010.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/423507.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git学习(7):创建ssh key时遇到“Bad escape character ‘ygen’.”

问题&#xff1a; 创建ssh key时遇到“Bad escape character ‘ygen’.” image.png $ ssh -keygen -t rsa -C "" Bad escape character ygen. 分析原因&#xff1a;ssh -keygen之间出现了空格&#xff0c;正确命令是没有空格的

用小程序·云开发打造运动圈小程序丨实战

乒乓圈小程序 和朋友合伙写了一个小程序&#xff0c;写了一个以共享乒乓信息和交流的平台———乒乓圈。我们使用了微信的云开发来完成数据和后台的作用。免去了租赁服务器。 我主要负责的是数据库的设计和云函数实现数据获取和触发器的功能和简单的两个页面。 正文 功能展示 页…

BeanUtil使用例子:解析并转化HttpServletRequest到Bean的全面测试

在Web表单提交后解析表单时&#xff0c;一般框架都提供了某种方式可以自动从表单映射到我们的POJO类里面。属性会被自动填充的。 但如果我们在某个需求里&#xff0c;真的需要用程序来解析的话&#xff0c;那么如果有几百个属性&#xff0c;可就是一个噩梦了。 我们可以用java的…

【vue开发】vue导出Excel表格教程demo

前端工作量最多的就是需求&#xff0c;需求就是一直在变&#xff0c;比如当前端数据写完之后&#xff0c;需要用Excel把数据下载出来&#xff1b;再比如前端在没有数据库想写些demo玩时&#xff0c;也是很好的选择。 第一步安装依赖包,修改配置 1、装依赖&#xff1a; cnpm ins…

git学习(10):Git的使用--如何将本地项目上传到Github(两种简单、方便的方法)

将本地项目上传到Github&#xff08;两种简单、方便的方法&#xff09; 一、第一种方法&#xff1a; 首先你需要一个github账号&#xff0c;所有还没有的话先去注册吧&#xff01; https://github.com/ 我们使用git需要先安装git工具&#xff0c;这里给出下载地址&#xff0…

.NET中栈和堆的比较1

原文出处&#xff1a; http://www.c-sharpcorner.com/UploadFile/rmcochran/csharp_memory01122006130034PM/csharp_memory.aspx 尽管在.NET framework下我们并不需要担心内存管理和垃圾回收(Garbage Collection)&#xff0c;但是我们还是应该了解它们&#xff0c;以优化我们的…

前端学习(1):HTML和CSS导学

最近为什么捡起前端&#xff0c;主要工作太忙&#xff0c;有时间就会抓一下后端&#xff0c;前端是我以前啃得比较多的 再来一次呢&#xff0c;工作在忙也不能停止学习勒 第一部分 第二部分 第三部分 第四部分 如何学习

Spring Boot----Dubbo原理分析

环境&#xff1a;需要创建一个dubbo.xml 通过ImportResource()导入xml&#xff1a; 1、首先spring启动解析配置文件的每一个标签的总接口是 org.springframework.beans.factory.xml.BeanDefinitionParser 2、DubboBeanDefinitionParser是它的一个实现类&#xff0c;通过调用par…

前端学习(2):什么是html和css

什么是HTML&#xff1f; W3C&#xff1a;万维网联盟&#xff0c;是目前web技术领域最具权威和影响力的标准机构&#xff0c;目前为止&#xff0c;W3C已发布了200多项影响深远的web技术标准及实施指南。 Hypertext markup language:超文本标记语言&#xff0c;该语言书写的代码通…

基于小程序·云开发构建高考查分小程序丨实战

2019高考报名人数达到了 1031 万的新高&#xff0c;作为一名三年前参考高考的准程序猿&#xff0c;赶在高考前&#xff0c;加班加点从零开始做了一款高考查分小程序&#xff0c;算是一名老学长送给学弟学妹们的高考礼。上线仅 1 个月&#xff0c;用户数就突破了 1k&#xff0c;…

前端学习(3):vs code编辑器

下载地址 https://code.visualstudio.com 下载安装教程 变成中文 在编辑器中运行我们的网页 open in browser view in browser 选中文件----首选项----设置 常用快捷键

QuickPart应用系列

在上一篇解决方案包部署与收回篇章中&#xff0c;我只是稍微提了下QuickPart.也许刚接触这块内容的朋友&#xff0c;可能还不是很清楚&#xff0c;QuickPart具体的功能能实现什么。首先要告诉你的是QuickPart的人性化之处&#xff0c;那就是给开发人员开发webpart提供更简洁的方…

前端学习(4):chome浏览器

一、认识浏览器 浏览器是网页显示、运行的平台&#xff0c;常用的浏览器有IE、火狐&#xff08;Firefox&#xff09;、谷歌&#xff08;Chrome&#xff09;、Safari和Opera等。我们平时称为五大浏览器。IE最新版为Edge。 常用浏览器 二、浏览器市场份额 可以通过百度的统计网…

实战 IE8 开发人员工具

今天整理我收藏的漫画的时候发现 风云3 少了两集&#xff08;486、487&#xff09;&#xff0c;这对于收藏者来说基本是不可忍受的&#xff1b; 从风云一到三&#xff0c;应该一集也不能少的&#xff1b; 决定上网去找找&#xff0c;不过溜达一圈常去的分享论坛&#xff0c;由于…

前端学习(6):javascript简介

我们需要思考以下六个问题&#xff1a; 1、javaScript是什么&#xff1f; 2、javaScript的用途是什么&#xff1f; 3、javaScript和ECMAScript的关系是什么&#xff1f; 4、javaScript由哪几部分组成&#xff1f; 5、javaScript的执行原理是怎样的&#xff1f; 6、在页面…

前端学习(7):web的三大技术

HTML(5) 是一门标记型语言&#xff0c;主要由一些具备特殊含义的标签构成&#xff08;建筑物结构&#xff09; 所谓HTML是“超文本标记语言”的英文缩写。我们上网所看到网页&#xff0c;多数都是由HTML写成的。“超文本”是指页面内可以包含图片、链接&#xff0c;甚至音乐、…

scala的foreach和for

一句印象深刻的话&#xff0c;Alan Kay&#xff08;Smalltalk发明者&#xff09;说得一句话&#xff1a;“I’m not against types, but I dont know of any typesystems that arent a complete pain, so I still like dynamic typing”。 并不是静态类型不好&#xff0c;只是静…

前端学习(8):HTML的基本属性和结构

一、HTML文档结构 <!DOCTYPE html> <html lang"zh-CN"> <head> <meta charset"UTF-8"> <title>css样式优先级</title> </head> <body> </body> </html> <!DOCTYPE html>声明为HTML5文…

借助云开发轻松实现后台数据批量导出丨实战

小程序导出数据到excel表&#xff0c;借助云开发后台实现excel数据的保存 我们在开发小程序的过程中&#xff0c;可能会有这样的需求&#xff1a;如何将云数据库里的数据批量导出到excel表里&#xff1f; 这个需求可以用强大的云开发轻松实现&#xff01; 这里需要用到云函数&a…

Storm的ack机制在项目应用中的坑

正在学习storm的大兄弟们&#xff0c;我又来传道授业解惑了&#xff0c;是不是觉得自己会用ack了。好吧&#xff0c;那就让我开始啪啪打你们脸吧。 先说一下ACK机制&#xff1a; 为了保证数据能正确的被处理, 对于spout产生的每一个tuple, storm都会进行跟踪。 这里面涉及到ac…