springboot@dubbo融合
dubbo 1,更加专业,性能更好,更统一 适用于并发较大的项目 2,是服务端强依赖的,暴露服务需要每个单独定义 3,对微服务的划分要求较高,建议服务提供者必须是变动较少,长期稳定的服务 springcloud 1,是服务间分离的,暴露服务是整个暴露。更纯粹,灵活,简单,易用 2,的接口协议约定比较自由且松散,需要有强有力的行政措施来限制接口无序升级。 dubbo provider启动时注册服务地址到registry consumer启动时订阅服务地址列表 服务地址变更时由registry推送回来 进行远程RPC调用 dubbo monitor 采集调用信息 springboot@dubbo融合 https://blog.csdn.net/myjess/article/details/114729793 http://localhost:9991//hello1
消费者 server.port=9991 dubbo.application.name=gmall-consumer dubbo.registry.protocol=zookeeper dubbo.registry.address=192.168.89.137:2181 dubbo.scan.base-package=cn.com dubbo.protocol.name=dubbo ## 从注册中心自动去找 dubbo.monitor.protocol=registry @EnableDubbo 客户端调用 @DubboReference UserService userService; 提供者 dubbo.application.name=gmall-provider dubbo.registry.protocol=zookeeper dubbo.registry.address=192.168.89.137:2181 dubbo.scan.base-package=cn.com.service.dubboService dubbo.protocol.name=dubbo dubbo.protocol.port=20880 ## 从注册中心自动去找 dubbo.monitor.protocol=registry @EnableDubbo 发布服务 @DubboService @Service public class UserServiceImpl implements UserService { <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.7.8</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>2.10.0</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>2.10.0</version> </dependency>
提供者: 如果60s内没有接收到消息,则发送心跳消息,如果连续三次(180s)没有接收到消息,则关闭channel。 消费者: 如果在60s内没有接收到消息,则发送心跳消息,如果连着三次没有收到心跳消息,消费者就会重连。 https://dubbo.apache.org/zh/docs/v2.7/user/references/xml/dubbo-registry/ 提供者 <bean id="demoServiceXmh" class="server.imp.DemoServiceImpl" ></bean> <dubbo:application name="dubbo-xmh" /> <dubbo:registry protocol="zookeeper" address="192.168.1.105:2181" id="xmhDubboProvider" subscribe="false" check="true"/> <dubbo:service timeout="8000" interface="server.DemoService" ref="demoServiceXmh" registry="xmhDubboProvider"/> 1,dubbo:registry 标签一些属性的说明: 1) register 是否向此注册中心注册服务,如果设为false,将只订阅,不注册。 默认true 2) check 注册中心不存在时,是否报错。 3) subscribe 是否向此注册中心订阅服务,如果设为false,将只注册,不订阅。 默认true 2,dubbo:service 标签的一些属性说明:服务端 register 默认true ,该协议的服务是否注册到注册中心 消费者 <dubbo:application name="dubbo-xmh"/> <dubbo:registry protocol="zookeeper" address="192.168.1.105:2181" id="xmhDubboProvider" /> <dubbo:reference timeout="8000" id="demoServiceXmh" interface="server.DemoService" registry="xmhDubboProvider" retries="0" check="false"/> 连接数配置: 1,和dubbo其它许多配置类似,接口层面的配置优先级高于全局配置;同样层面的配置消费者端优先于提供者。 2,Dubbo Consumer的初始化连接过程本质就是对配置中的reference引入的服务进行连接建立,按照service+注册中心的维度,与某个注册中心下某个service的所有的provider建立连接的过程。 提供者端: <!-- global set in provider --> <dubbo:provider protocol="dubbo" accepts="10" /> or <!-- global set in provider --> <dubbo:protocol name="dubbo" accepts="10" /> or <!-- private set in provider --> <dubbo:service interface="com.frank.OrderService" connections="10" /> 消费者端: <!-- global set in consumer --> <dubbo:consumer connections="10" /> dubbo协议长连接不支持此配置 默认缺省值100 or <!-- private set in consumer --> <dubbo:reference interface="com.frank.OrderService" connections="10" /> 对每个提供者的最大连接数 dubbo等长连接协表示建立的长连接个数
dubbo
Random LoadBalance 随机,按权重设置随机概率。
RoundRobin LoadBalance 权重轮询调度算法 LeastActive LoadBalance 最少活跃调用数 ConsistentHash LoadBalance 一致性Hash,相同参数的请求总是发到同一提供者
1,新的服务注册到注册中心以后,注册中心会将这些服务通过 @@notify到消费者
2,dubbo服务端和注册中心(zk)存在心跳,由dubbo服务端发起,这是基于zk集群和zk客户端之间的心跳机制。 服务端和zk之间的心跳是zkclient维护的
3,dubbo客户端和dubbo服务端之间存在心跳,由dubbo客户端主动发起
Zookeeper当master挂了,会在30-120s进行leader选举 服务不可用
而 Eureka 不会,即使Eureka有部分挂掉,还有其他节点可以使用的,他们保持平级的关系,只不过信息有可能不一致,这就是AP
service-url.defaultZone: http://eureka1.com:7001/eureka/,http://eureka2.com:7002/eureka/
@DubboReference(loadbalance= CommonConstants.DEFAULT_LOADBALANCE) random, roundrobin, leastactive <dubbo:reference id="serviceDemo" loadbalance="roundrobin" interface="com.jiangzheng.course.dubbo.api.service.ServiceDemo"/> @DubboService(interfaceClass = SysUnitService.class, registry = "local",weight=10) <dubbo:service id="serviceDemo" weight="100" warmup="10 * 60 * 1000" interface="com.jiangzheng.course.dubbo.api.service.ServiceDemo" ref="iServiceDemo"/> weight="100" weight="200" weight="300" 我们可以看到SPI中的配置: /META-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.LoadBalance 路径下内容: random=org.apache.dubbo.rpc.cluster.loadbalance.RandomLoadBalance roundrobin=org.apache.dubbo.rpc.cluster.loadbalance.RoundRobinLoadBalance leastactive=org.apache.dubbo.rpc.cluster.loadbalance.LeastActiveLoadBalance consistenthash=org.apache.dubbo.rpc.cluster.loadbalance.ConsistentHashLoadBalance shortestresponse=org.apache.dubbo.rpc.cluster.loadbalance.ShortestResponseLoadBalance 配置<dubbo:provider delay="5000"/>延迟暴露所有dubbo服务;
iBase4J是Java语言的分布式系统架构。使用Spring整合的开源框架。 iBase4J特点: 使用Maven对项目进行模块化管理,提高项目的易开发性、扩展性。 系统包括4个子系统:系统管理Service、系统管理Web、业务Service、业务Web。 系统管理:包括用户管理、权限管理、数据字典、系统参数管理等等。 业务相关:您的业务开发。 可以无限的扩展子系统,子系统之间使用Dubbo或MQ进行通信。 iBase4J主要功能: 1、数据库:Druid数据库连接池,监控数据库访问性能,统计SQL的执行性能。数据库密码加密,加密方式请查看PropertiesUtil,decryptProperties属性配置需要解密的key。 2、持久层:mybatis持久化,使用MyBatis-Plus优化,减少sql开发量;aop切换数据库实现读写分离。Transaction注解事务。 3、MVC:基于spring mvc注解,Rest风格Controller。Exception统一管理。 4、调度:Spring+quartz, 可以查询、修改周期、暂停、删除、新增、立即执行,查询执行记录等。 5、基于session的国际化提示信息,职责链模式的本地语言拦截器,Shiro登录、URL权限管理。会话管理,强制结束会话。 6、缓存和Session:注解redis缓存数据;shiro实现redis分布式session同步,重启服务会话不丢失。 7、多系统交互:Dubbo,ActiveMQ多系统交互,ftp/sftp/fastdafs发送文件到独立服务器,使文件服务分离。 8、前后端分离:没有权限的文件只用nginx代理即可。 9、日志:log4j2打印日志,业务日志和调试日志分开打印。同时基于时间和文件大小分割日志文件。 10、QQ、微信、新浪微博第三方登录。 11、工具类:excel导入导出,汉字转拼音,身份证号码验证,数字转大写人民币,FTP/SFTP/fastDFS上传下载,发送邮件,redis缓存,加密等等。 技术选型: 核心框架:Sring boot + Spring Framework + Dubbo + ibase4j-common 安全框架:Apache Shiro 任务调度:Spring + Quartz 持久层框架:MyBatis + MyBatis-Plus 数据库连接池:Alibaba Druid 缓存框架:Redis 会话管理:Spring-Session 日志管理:SLF4J、Log4j2 前端框架:Angular JS + Bootstrap + Jquery 启动说明: * 项目依赖activemq、Redis和ZooKeeper服务。 * 使用nginx代理UI:修改配置里的UI目录后重启nginx。 * 启动方法: SysServiceApplication.java SysWebApplication.java * 测试环境打包命令: clean package -P test * 生产环境打包命令: clean package -P product