@Configuration
@ConditionalOnClass(Exporter.class)
@PropertySource(value = "classpath:/dubbo.properties")
public class DubboConfiguration {
@Value("${dubbo.application.name}")
private String applicationName;
@Value("${dubbo.application.logger}")
private String logger;
@Value("${dubbo.registry.protocol}")
private String protocol;
@Value("${dubbo.registry.address}")
private String registryAddress;
@Value("${dubbo.protocol.name}")
private String protocolName;
@Value("${dubbo.protocol.port}")
private int protocolPort;
@Value("${dubbo.protocol.serialization}")
private String protocolSerialization;
@Value("${dubbo.consumer.timeout}")
private int consumerTimeout;
@Value("${dubbo.consumer.retries}")
private int consumerRetries;
/**
- 设置dubbo扫描包 */ @Bean public static AnnotationBean annotationBean(@Value("${dubbo.annotation.package}") String packageName) { AnnotationBean annotationBean = new AnnotationBean(); annotationBean.setPackage(packageName); return annotationBean; }
/**
- 注入dubbo上下文 */ @Bean public ApplicationConfig applicationConfig() { // 当前应用配置 ApplicationConfig applicationConfig = new ApplicationConfig(); applicationConfig.setName(applicationName); applicationConfig.setLogger(logger); return applicationConfig; }
/**
- 注入dubbo注册中心配置,基于zookeeper */ @Bean public RegistryConfig registryConfig() { // 连接注册中心配置 RegistryConfig registry = new RegistryConfig(); registry.setProtocol(protocol); registry.setAddress(registryAddress); return registry; }
/**
- 默认基于dubbo协议提供服务 */ @Bean public ProtocolConfig protocolConfig() { // 服务提供者协议配置 ProtocolConfig protocolConfig = new ProtocolConfig(); protocolConfig.setName(protocolName); protocolConfig.setSerialization(protocolSerialization); protocolConfig.setPort(protocolPort); protocolConfig.setThreads(200); System.out.println("默认protocolConfig:" + protocolConfig.hashCode()); return protocolConfig; }
/**
- dubbo服务提供 */ @Bean(name = "defaultConsumer") public ConsumerConfig consumerConfig() { ConsumerConfig consumerConfig = new ConsumerConfig(); consumerConfig.setTimeout(consumerTimeout); consumerConfig.setRetries(consumerRetries); return consumerConfig; } }
基于Configuration配置Dubbo服务,在没有加入AOP的时候,正常发布,但是如果dubbo服务类,符合AOP条件,那么会造成SpringBoot启动时,先生成了Proxy,导致
AnnotationBean.isMatchPackage方法检测Bean时,与配置的扫描包路径不符,致使dubbo服务注册被略过,
想用@Order来设置顺序(dubbo服务注册先于AOP代理生成),但并未生效,请问各位大神有没有能帮忙解决的。万分感谢!