Dubbo

Dubbo,第1张

Dubbo

概述:阿里的东西,做分布式管理用的..........................,现在是阿帕奇在维护.....

高端点:

Double是一款高性能,轻量级的java RPC框架,致力于提供高性能和透明化的 RPC (通过网络传输数据)远程服务调用方案,以及 SOA 服务治理方案 架构图:

 常听到的两个词:

关于dubbo的基础概念: Qps:每秒钟的请求次数 Tps: 每秒钟的事务次数 测试数值的方式:通过日志记录

注意点:

只要仔细分析:dubbo 的工作流程是,消费端去注册中心拿到服务端的 url 和端口信息,会将该信息缓存,然后去调用服务端(生产端),当服务端的信息发生变化时注册中心会通知消费端将缓存刷新,然后消费端会重新从注册中心获取最新的信息,由于在消费端存在缓存,所以当注册中中心挂了,消费端还能访问到服务端,

 

超时和重试: 服务消费者在调用服务提供者的时候发生了阻塞、等待的情形,这个时候,服务消 费者会一直等待下去,可能会造成雪崩,服务器瘫痪 编码时使用注解时候设置一下: @Service(timeout="超时时间",retries="尝试次数") @Reference(timeout="超时时间") 注意:在消费端和服务端都可以设置超时限制,但是超时主要还是看消费端的为主,但 是在设置超时时建议还是在服务端设置超时限制 多版本: 升级呀啥的,编码时注解设置 服务端@Service(version=”版本号”) 消费端@Reference(version=”要使用的版本号”) 负载均衡 概述:负载均衡就是将客户端请求分散在集群的各个节点上 均衡策略: dubbo的四种负载均衡策略: Random : 按权随机 RoundRobin:按权轮循 LeastActive: 响应速度最快, 注册中心 ConsistentHash : hash 算法获取访问的服务,其实就是看哪个节点上次执行的和这次服务调用相同的业务,便调用谁 编码时候: @Reference(loadbalance = "leastactive") 根据情况选取 @Service(weight = 200)设置权重 集群容错模式(6种)从来就没记住过,但是还面试老问: Failover Cluster:失败重试。默认值。当出现失败,重试其它服务器 ,默认重试 2 次,使用 retries 配置。一般用于读 *** 作 Failfast Cluster 快速失败,只发起一次调用,失败立即报错,通常用于写 *** 作。 Failsafe Cluster :失败安全,出现异常时,直接忽略。返回一个空结果。 Failback Cluster : 失败自动恢复,后台记录失败请求,定时重发。通常用于消息 通知 *** 作。 Forking Cluster :并行调用多个服务器,只要一个成功即返回。 Broadcast Cluster :广播调用所有提供者,逐个调用,任意一台报错则报错

编码设置:

@Reference(cluster = "failover")

序列化 在使用 dubbo 传输模型类时模型类必须实现 serializable 接口,在 dubbo 的内部已 将序列化流做了封装 服务降级 概述 : 可以通过服务降级功能,临时屏蔽某个出错的非关键服务,并定义降级后的返 回策略 Force return null Fail return null 编码: @Reference(mock = "fail return null") 小案例(关键是配置文件MVC环境):

准备:使用的zookeeper作为i注册中心:

度盘:链接:https://pan.baidu.com/s/1B4phApJjF1-ZjBhk7o2oXQ 
提取码:7ph8

官网:Apache ZooKeeper

zk的安装很简单:解压即可,linux和window相同

解压后将配置文件中的zoo_sample.cfg改称zoo.cfg

修改配置文件中的数据存贮目录(这块自己创建一个即可):dataDir=文件目录

进入bin目录启动:

wiindow直接点击即可:

linux: ./zkServer.sh  start

   失败会有提示

默认端口号2181:

基本环境完事!

案例开始:

定义生产端消费端统一的依赖包,里面定义pojo,被调用的接口,生产端和消费端依赖这个包即可!!通过maven的依赖传递就实现了,基本思路就这样!

生产端和消费端:

pom中的依赖相同:


    5.1.9.RELEASE
    2.7.4.1
    4.0.0



    
    
        javax.servlet
        javax.servlet-api
        3.1.0
        provided
    
    
    
        org.springframework
        spring-context
        ${spring.version}
    
    
    
        org.springframework
        spring-webmvc
        ${spring.version}
    

    
    
        org.slf4j
        slf4j-api
        1.7.21
    
    
        org.slf4j
        slf4j-log4j12
        1.7.21
    



    
    
        org.apache.dubbo
        dubbo
        ${dubbo.version}
    
    
    
        org.apache.curator
        curator-framework
        ${zookeeper.version}
    
    
    
        org.apache.curator
        curator-recipes
        ${zookeeper.version}
    


    
    
        org.example
        dubbo-inference
        1.0-SNAPSHOT
    

生产端 

生产端配置文件(主要就是这个难搞,要不我都懒得整理这个):


	
	
	
	
	
		
		
	
	
	
	
	
	
	

生产端代码(参考注释修改即可):

**
 * 注意:导入包为dubbo目录下的包
 */



@Service
public class iPersionServiceImp implements PersionService {
    @Override
    public Persion find() {
        return new Persion("张三",12);
    }
}

web.xml(谁写都一样,不过这个案例生产端只是打了个war包,将原来的jar包作为一个服务提供给消费端,听起来似乎很模糊,其实就是提供服务包),这块就不需要配置加载mvc的东西了




    
    
        contextConfigLocation
        classpath*:applicationContext*.xml
    
    
        org.springframework.web.context.ContextLoaderListener
    

通用的的日志配置文件log4j.properties(必须叫这个名字),自己配太慢,

# DEBUG < INFO < WARN < ERROR < FATAL
# Global logging configuration
log4j.rootLogger=info, stdout,file
# My logging configuration...
#log4j.logger.com.tocersoft.school=DEBUG
#log4j.logger.net.sf.hibernate.cache=debug
## Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p %d %C: %m%n

log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=../logs/iask.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}  %l  %m%n

消费端

消费端配置文件:





    
    
    
    
    
        
        
    
    
    
    
    
    


消费端代码:

package nanfeng;

import nanfeng.pojo.Persion;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class Controller {

    

    
    @Reference(mock = "fail return null")
    private PersionService service;

    @RequestMapping("/find")
    public Persion find() {
        return service.find();
    }
}

web.xml(这个谁写都一样,直接粘贴)



	
    
        springmvc
        org.springframework.web.servlet.DispatcherServlet
        
        
            contextConfigLocation
            classpath:springmvc.xml
        
    

    
        springmvc
        /
    


差不多dubbo结合SpringMVC使用就这样子啦!!!! ~~~~~~~~~~~~~~~~````参考修改即可使用!!!

换成SpringBoot环境

dubbo配置文件:

dubbo.scan.basePackages = com.tanhua.dubbo.server
dubbo.application.name = dubbo-provider-tanhua

dubbo.protocol.name = dubbo
dubbo.protocol.port = 20880

dubbo.registry.address = zookeeper://127.0.0.1:2181
dubbo.registry.client = zkclient

依赖:


    com.alibaba.boot
    dubbo-spring-boot-starter
    0.2.0



    com.alibaba
    dubbo
    2.6.4



    org.apache.zookeeper
    zookeeper
    3.4.13


    com.github.sgroschupf
    zkclient
    0.1

 

参考修改,代码层面上东西不变 

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5576322.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存