转载

Aapache Dubbo day3 Dubbo的服务治理和生态

1、生态化(融入springBoot)支持更多组件

2、标准化

DubboSpringBoot-starter 的支持

Aapache Dubbo day3 Dubbo的服务治理和生态

pom 中增加 springboot-dubbostart 使得 springBoot 自动集成 dubbo

<!-- spring-boot dubbo-starter 自动集成dubbo -->
<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>2.7.1</version>
</dependency>
复制代码

自动配置的文件:

Aapache Dubbo day3 Dubbo的服务治理和生态

之后引用 dubbo 核心, dubbo 的依赖为:

<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo</artifactId>
    <version>2.7.2</version>
</dependency>
复制代码

使用 zookeeper

<!-- zk 服务注册-->
<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-framework</artifactId>
    <version>4.0.1</version>
</dependency>

<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-recipes</artifactId>
    <version>4.0.1</version>
</dependency>
复制代码

最基本配置:

dubbo.application.name=spring-boot-dubbo
#配置集群时地址
#dubbo.registry.address=zookeeper://目标服器地址?backup=ip:port,ip:port
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.scan.base-packages=com.fighting.an.impl
#调整dubbo日志级别用于调试错误
logging.level.root=DEBUG
复制代码

定义 JAVA 接口

package com.fightingan.dev;
/**
 * @author 30378
 */
public interface ISayHello {
    void sayHello();
}
复制代码

完成实现类:

package com.fightingan.dev.springbootdubbo.impl;

import com.fightingan.dev.ISayHello;
import org.apache.dubbo.config.annotation.Service;

/**
 * @author 30378
 * 注解形式发布端口(install形式发布jar包,并且调用在pom种将其引入)
 */
@Service
public class SayHelloImpl implements ISayHello {
    @Override
    public void sayHello() {
        System.out.println("Hello Dubbo");
    }
}
复制代码

启动 SpringBoot 即可

@SpringBootApplication
public class SpringbootDubboApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringbootDubboApplication.class, args);
    }
}
复制代码
@RestController
public class TestController {
    com.yan.dev.IsayHello isayHello = null;
	//远程调用的服务接口
    @Reference
    @RequestMapping("/hello")
    String sayHello(){
        return isayHello.sayHello();
    }
}
复制代码
Aapache Dubbo day3 Dubbo的服务治理和生态

@Service 可以实现服务端的负载均衡( loadbalance 默认时 random ,基于权重的随机算法)以及配置当前程序权重 weight

@Service(loadbalance = "random",weight = 9)
public class SayHello implements IsayHello {
    @Override
    public void sayHello() {
        System.out.println("Hello yan !");
    }
}
复制代码

开启一个新的程序:

Dubbo 的负载均衡算法有:最小活跃度( LeastActiveLoadBalance 如果性能高、积累少、活跃度低 ----> 优先考虑,动态计算 )、随机( RandomLoadBalance )、加权轮询 RoundRobinLoadBalance 、一致性Hash( ConsistentHashLoadBalance )

Dubbo 是非 web 项目,不需要部署 tomcat

配置优先级,以客户端为准( method > service(Reference) > 服务端 )

@Reference(loadbalance = "roundrobin")
复制代码

容错机制(策略)

容错情况:大概为6种

  1. 重试 failover(默认情况,但可能出现数据重复,默认重试3次,retries=2,重试2次加本来的调用一共三次)
  2. 不希望重试,快速失败 failfast
  3. 失败之后,记录日志重新发起 failback
  4. 失败安全 错误后直接忽略 failsafe
  5. 并行调用多个服务器 forking
  6. 广播出去 -> 任何一台报错就失败(更新所有节点缓存)
@Service(loadbalance = "random",weight = 9,cluster = "failsafe")
复制代码

服务降级

异常降级 -> 异常提供默认数据

限流降级 -> 线程池类似(拒绝)

熔断降级 -> [触发条件]

Mock 机制(通过mock属性来指定对应类)

1、定义对应的类

package com.yan.dev.client;

/**
 * @author 30378
 * 服务降级
 */
public class SayHelloMock implements com.yan.dev.IsayHello{
    @Override
    public String sayHello(){
        return "异常处理的兜底数据!";
    }
}
复制代码

2、在客户端 mock 一下,客户端返回值,返回给服务端,,timeout = 200 设置超时,服务器、客户端都可用。

@Reference(loadbalance = "roundrobin",mock = "com.yan.dev.client.SayHelloMock",timeout = 200)
@RequestMapping("/hello")
String sayHello(){
    return isayHello.sayHello();
}
复制代码

2.7新功能

配置中心

默认配置中心的优先级配置最高。配置中心单独配置本地也要进行配置。保证高可用。

通过zk实现配置中心

Aapache Dubbo day3 Dubbo的服务治理和生态

dubboconfig

#配置中心
dubbo.config-center.address=zookeeper://127.0.0.1:2181
dubbo.config-center.app-name=springboot-dubbo-provider
dubbo.scan.base-package=com.fightingan.dev
dubbo.metadata-report.address=zookeeper://127.0.0.1:2181
dubbo.application.name=spring-dubbo

#配置集群时地址(本地配置)
#dubbo.registry.address=zookeeper://目标服器地址?backup=ip:port,ip:port
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.registry.simplified=true
dubbo.scan.base-packages=com.yan.dev.dubboprovide.impl
复制代码
原文  https://juejin.im/post/5db06eac6fb9a0206062b6f2
正文到此结束
Loading...