• 概念原理可以自己去搜,仅展示用法,方便直接套用。

dubbo双注册配置:

dubbo.application.name = 项目区分名
dubbo.application.serialize-check-status=WARN

#zookeeper配置
#noRegister
dubbo.registries.noRegister.address=zk1的host:端口号,zk2的host:端口号,zk3的host:端口号
dubbo.registries.noRegister.default=false
dubbo.registries.noRegister.protocol=zookeeper
dubbo.registries.noRegister.simplified=false
#xxxRegister
dubbo.registries.xxxRegister.address=zk1的host:端口号,zk2的host:端口号,zk3的host:端口号
dubbo.registries.xxxRegister.default=true	#多分组时配置
dubbo.registries.xxxRegister.protocol=zookeeper
dubbo.registries.xxxRegister.group=/xxx/分组名
dubbo.registries.xxxRegister.simplified=false	#多生产者时配置

#nacos配置  分组时不推荐使用/
#noRegister-nacos  有权限认证的配置
dubbo.registries.noRegister-nacos.address=nacos1的host:端口号?username=账号&password=密码,nacos2的host:端口号?username=账号&password=密码,nacos3的host:端口号?username=账号&password=密码
dubbo.registries.noRegister-nacos.default=false
dubbo.registries.noRegister-nacos.protocol=nacos
dubbo.registries.noRegister-nacos.simplified=false
#xxxRegister
dubbo.registries.xxxRegister-nacos.address=nacos1的host:端口号?username=账号&password=密码,nacos2的host:端口号?username=账号&password=密码,nacos3的host:端口号?username=账号&password=密码
dubbo.registries.xxxRegister-nacos.default=true 	#多分组时配置
dubbo.registries.xxxRegister-nacos.protocol=nacos
dubbo.registries.xxxRegister-nacos.group=xxx-分组名
dubbo.registries.xxxRegister-nacos.simplified=false
 
检查模式

反序列化安全策略

检查模式分为三个级别:STRICT 严格检查,WARN 告警,DISABLE 禁用。 STRICT 严格检查:禁止反序列化所有不在允许序列化列表(白名单)中的类。 WARN 告警:仅禁止序列化所有在不允许序列化列表中(黑名单)的类,同时在反序列化不在允许序列化列表(白名单)中类的时候通过日志进行告警。 DISABLE 禁用:不进行任何检查。

3.1 版本中默认为 WARN 告警级别,3.2 版本中默认为 STRICT 严格检查级别。

类检查机制保证服务提供方和服务消费方类之间的兼容性和安全

在代码中的使用:单消费

Service层接口单个实现类

生产者
//无分组的
@DubboService(registry = {"noRegister","noRegister-nacos"},retries = 0,timeout = 10000)
@Service("xxxService")
public class XxxServiceImpl implements XxxService {}

//有分组的
@DubboService(registry = {"xxxRegister","xxxRegister-nacos"},retries = 0,timeout = 10000)
@Service("yyyService")
public class YyyServiceImpl implements YyyService {}
消费者
//zk单消费
//无分组
@DubboReference(registry = {"noRegister"},timeout = 3000,check = false,retries = 0)
private XxxService xxxService;

//有分组
@DubboReference(registry = {"XxxRegister"},timeout = 3000,check = false,retries = 0)
private YyyService yyyService;


//nacos单消费
//无分组
@DubboReference(registry = {"noRegister-nacos"},timeout = 3000,check = false,retries = 0)
private XxxService xxxService;

//有分组
@DubboReference(registry = {"XxxRegister-nacos"},timeout = 3000,check = false,retries = 0)
private YyyService yyyService;

Service层接口两个实现类处理

流程介绍

我这里仅展示修改代码部分,远程服务调用,dubbo流程使用经过三个项目

接口项目->实现类项目->消费者项目

version属性

这里仅使用了远程服务,没有本地扩展,所以通过version属性实现

生产者
//有分组的,无分组的可以类推
@DubboService(registry = {"xxxRegister","xxxRegister-nacos"},retries = 0,timeout = 5000,version = "1.0.0")
@Service("xxxYyyService")
public class XxxYyyServiceImpl implements XxxService {
}


@DubboService(registry = {"xxxRegister","xxxRegister-nacos"},retries = 0,timeout = 5000,version = "1.0.1")
@Service("xxxZzzService")
public class XxxZzzServiceImpl implements XxxService {
}
消费者
@DubboReference(registry = {"xxxRegister-nacos"},version = "1.0.0", check = false, timeout = 5000)
private XxxService xxxYyyService;

    
@DubboReference(registry = {"xxxRegister-nacos"},version = "1.0.1", check = false, timeout = 5000)
private XxxService xxxZzzService;
SPI机制
接口项目
import org.apache.dubbo.common.extension.SPI;

@SPI
public interface MyService {
}
实现类项目

resources/META-INF/dubbo 目录下创建一个文件,文件名是接口的全限定名,内容为实现类的别名和全限定名

MyServiceImpl1=com.example.MyServiceImpl1
MyServiceImpl2=com.example.MyServiceImpl2

生产者

import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.stereotype.Service;

@Service
@DubboService(registry = {"xxxRegister","xxxRegister-nacos"}, retries = 0, timeout = 5000)
public class MyServiceImpl1 implements MyService {
}

@Service
@DubboService(registry = {"xxxRegister","xxxRegister-nacos"}, retries = 0, timeout = 5000)
public class MyServiceImpl2 implements MyService {
}
消费者项目

消费者

import org.apache.dubbo.common.extension.ExtensionLoader;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.stereotype.Component;

@Component
public class MyServiceConsumer {

    @DubboReference(registry = {"buyRegister-nacos"},check = false, timeout = 5000)
    private MyService myServiceImpl1 = ExtensionLoader.getExtensionLoader(MyService.class).getExtension("MyServiceImpl1");

    @DubboReference(registry = {"buyRegister-nacos"},check = false, timeout = 5000)
    private MyService myServiceImpl2 = ExtensionLoader.getExtensionLoader(MyService.class).getExtension("MyServiceImpl2");
   
}

更多推荐