dubbo 服务调用说明
导入依赖
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
com.alibaba.cloud
spring-cloud-starter-dubbo
自动配置类
spring-cloud-starter-dubbo/spring.factories
# 自动配置类 org.springframework.boot.autoconfigure.EnableAutoConfiguration= *元数据自动配置类 com.alibaba.cloud.dubbo.autoconfigure.DubbometadataAutoConfiguration, *服务调用自动配置类 com.alibaba.cloud.dubbo.autoconfigure.DubboOpenFeignAutoConfiguration, *服务注册自动配置类 com.alibaba.cloud.dubbo.autoconfigure.DubboServiceRegistrationAutoConfiguration, *非web应用自动注册配置类 com.alibaba.cloud.dubbo.autoconfigure.DubboServiceRegistrationNonWebApplicationAutoConfiguration, *负载均衡调用自动配置类 com.alibaba.cloud.dubbo.autoconfigure.DubboLoadBalancedRestTemplateAutoConfiguration, *dubbo服务自动配置类 com.alibaba.cloud.dubbo.autoconfigure.DubboServiceAutoConfiguration, *服务发现自动配置类 com.alibaba.cloud.dubbo.autoconfigure.DubboServiceDiscoveryAutoConfiguration org.springframework.boot.actuate.autoconfigure.web.ManagementContextConfiguration= com.alibaba.cloud.dubbo.actuate.DubbometadataEndpointAutoConfiguration org.springframework.context.ApplicationContextInitializer= com.alibaba.cloud.dubbo.context.DubboServiceRegistrationApplicationContextInitializer org.springframework.boot.env.EnvironmentPostProcessor= com.alibaba.cloud.dubbo.env.DubboNonWebApplicationEnvironmentPostProcessor
dubbo-spring-boot-autoconfigure-compatible/spring.factories
# 自动配置类 org.springframework.boot.autoconfigure.EnableAutoConfiguration= org.apache.dubbo.spring.boot.autoconfigure.DubboAutoConfiguration, org.apache.dubbo.spring.boot.autoconfigure.DubboRelaxedBindingAutoConfiguration org.springframework.context.ApplicationListener= org.apache.dubbo.spring.boot.context.event.OverrideDubboConfigApplicationListener, org.apache.dubbo.spring.boot.context.event.DubboConfigBeanDefinitionConflictApplicationListener, org.apache.dubbo.spring.boot.context.event.WelcomeLogoApplicationListener, org.apache.dubbo.spring.boot.context.event.AwaitingNonWebApplicationListener org.springframework.boot.env.EnvironmentPostProcessor= org.apache.dubbo.spring.boot.env.DubboDefaultPropertiesEnvironmentPostProcessor org.springframework.context.ApplicationContextInitializer= org.apache.dubbo.spring.boot.context.DubboApplicationContextInitializer
DubboAutoConfiguration
@ConditionalOnProperty(
prefix = "dubbo",
name = {"enabled"},
matchIfMissing = true
)
@Configuration
@AutoConfigureAfter({DubboRelaxedBindingAutoConfiguration.class})
@EnableConfigurationProperties({DubboConfigurationProperties.class})
//自动配置类DubboConfigurationProperties
@EnableDubboConfig
public class DubboAutoConfiguration implements ApplicationContextAware, BeanDefinitionRegistryPostProcessor {
public DubboAutoConfiguration() {
}
@ConditionalOnProperty(
prefix = "dubbo.scan.",
name = {"base-packages"}
)
@ConditionalOnBean(
name = {"dubbo-service-class-base-packages"}
)
@Bean
public ServiceClassPostProcessor serviceClassPostProcessor(@Qualifier("dubbo-service-class-base-packages") Set packagesToScan) {
return new ServiceClassPostProcessor(packagesToScan);
}
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
if (applicationContext instanceof ConfigurableApplicationContext) {
ConfigurableApplicationContext context = (ConfigurableApplicationContext)applicationContext;
DubboLifecycleComponentApplicationListener dubboLifecycleComponentApplicationListener = new DubboLifecycleComponentApplicationListener();
dubboLifecycleComponentApplicationListener.setApplicationContext(applicationContext);
context.addApplicationListener(dubboLifecycleComponentApplicationListener);
DubboBootstrapApplicationListener dubboBootstrapApplicationListener = new DubboBootstrapApplicationListener();
dubboBootstrapApplicationListener.setApplicationContext(applicationContext);
context.addApplicationListener(dubboBootstrapApplicationListener);
}
}
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
this.removeBeanDefinition(registry, "dubboLifecycleComponentApplicationListener");
this.removeBeanDefinition(registry, "dubboBootstrapApplicationListener");
}
private void removeBeanDefinition(BeanDefinitionRegistry registry, String beanName) {
if (registry.containsBeanDefinition(beanName)) {
registry.removeBeanDefinition(beanName);
}
}
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
}
}
DubboConfigurationProperties
@ConfigurationProperties("dubbo")
public class DubboConfigurationProperties {
@NestedConfigurationProperty
private DubboConfigurationProperties.Config config = new DubboConfigurationProperties.Config();
@NestedConfigurationProperty
private DubboConfigurationProperties.Scan scan = new DubboConfigurationProperties.Scan();
@NestedConfigurationProperty
private ApplicationConfig application = new ApplicationConfig(); //应用配置
@NestedConfigurationProperty
private ModuleConfig module = new ModuleConfig(); //模块配置
@NestedConfigurationProperty
private RegistryConfig registry = new RegistryConfig(); //注册中心配置
@NestedConfigurationProperty
private ProtocolConfig protocol = new ProtocolConfig(); //protocol协议配置
@NestedConfigurationProperty
private MonitorConfig monitor = new MonitorConfig(); //监控中心配置
@NestedConfigurationProperty
private ProviderConfig provider = new ProviderConfig(); //provider配置
@NestedConfigurationProperty
private ConsumerConfig consumer = new ConsumerConfig(); //consumer配置
@NestedConfigurationProperty
private ConfigCenterBean configCenter = new ConfigCenterBean(); //配置中心配置
@NestedConfigurationProperty
private metadataReportConfig metadataReport = new metadataReportConfig(); //元数据中心配置
private Map modules = new linkedHashMap();
private Map registries = new linkedHashMap();
private Map protocols = new linkedHashMap();
private Map monitors = new linkedHashMap();
private Map providers = new linkedHashMap();
private Map consumers = new linkedHashMap();
private Map configCenters = new linkedHashMap();
private Map metadataReports = new linkedHashMap();
public DubboConfigurationProperties() {
}
ApplicationConfig
public class ApplicationConfig extends AbstractConfig {
private static final Logger LOGGER = LoggerFactory.getLogger(ApplicationConfig.class);
private static final long serialVersionUID = 5508512956753757169L;
private String name;
private String version;
private String owner;
private String organization;
private String architecture;
private String environment;
private String compiler;
private String logger;
private List registries;
private String registryIds;
private MonitorConfig monitor;
private Boolean isDefault;
private String dumpDirectory;
private Boolean qosEnable;
private String qosHost;
private Integer qosPort;
private Boolean qosAcceptForeignIp;
private Map parameters;
private String shutwait;
private String hostname;
private String metadataType;
private Boolean registerConsumer;
private String repository;
public ApplicationConfig() {
}
ModuleConfig
public class ModuleConfig extends AbstractConfig {
private static final long serialVersionUID = 5508512956753757169L;
private String name;
private String version;
private String owner;
private String organization;
private List registries;
private MonitorConfig monitor;
private Boolean isDefault;
public ModuleConfig() {
}
RegistryConfig
public class RegistryConfig extends AbstractConfig {
public static final String NO_AVAILABLE = "N/A";
private static final long serialVersionUID = 5508512956753757169L;
private String address;
private String username;
private String password;
private Integer port;
private String protocol;
private String transporter;
private String server;
private String client;
private String cluster;
private String zone;
private String group;
private String version;
private Integer timeout;
private Integer session;
private String file;
private Integer wait;
private Boolean check;
private Boolean dynamic;
private Boolean register;
private Boolean subscribe;
private Map parameters;
private Boolean isDefault;
private Boolean simplified;
private String extraKeys;
private Boolean useAsConfigCenter;
private Boolean useAsmetadataCenter;
private String accepts;
private Boolean preferred;
private Integer weight;
public RegistryConfig() {
}
ProviderConfig
public class ProviderConfig extends AbstractServiceConfig {
private static final long serialVersionUID = 6913423882496634749L;
private String host;
private Integer port;
private String contextpath;
private String threadpool;
private String threadname;
private Integer threads;
private Integer iothreads;
private Integer queues;
private Integer accepts;
private String codec;
private String charset;
private Integer payload;
private Integer buffer;
private String transporter;
private String exchanger;
private String dispatcher;
private String networker;
private String server;
private String client;
private String telnet;
private String prompt;
private String status;
private Integer wait;
private Boolean isDefault;
public ProviderConfig() {
}
ConsumerConfig
public class ConsumerConfig extends AbstractReferenceConfig {
private static final long serialVersionUID = 2827274711143680600L;
private Boolean isDefault;
private String client;
private String threadpool;
private Integer corethreads;
private Integer threads;
private Integer queues;
private Integer shareconnections;
public ConsumerConfig() {
}
ProtocolConfig
public class ProtocolConfig extends AbstractConfig {
private static final long serialVersionUID = 6913423882496634749L;
private String name;
private String host;
private Integer port;
private String contextpath;
private String threadpool;
private String threadname;
private Integer corethreads;
private Integer threads;
private Integer iothreads;
private Integer queues;
private Integer accepts;
private String codec;
private String serialization;
private String charset;
private Integer payload;
private Integer buffer;
private Integer heartbeat;
private String accesslog;
private String transporter;
private String exchanger;
private String dispatcher;
private String networker;
private String server;
private String client;
private String telnet;
private String prompt;
private String status;
private Boolean register;
private Boolean keepAlive;
private String optimizer;
private String extension;
private Map parameters;
private Boolean isDefault;
private Boolean sslEnabled;
public ProtocolConfig() {
}
MonitorConfig
public class MonitorConfig extends AbstractConfig {
private static final long serialVersionUID = -1184681514659198203L;
private String protocol;
private String address;
private String username;
private String password;
private String group;
private String version;
private String interval;
private Map parameters;
private Boolean isDefault;
public MonitorConfig() {
}
ConfigCenterBean
public class ConfigCenterBean extends ConfigCenterConfig implements ApplicationContextAware, DisposableBean, EnvironmentAware {
private transient ApplicationContext applicationContext;
private Boolean includeSpringEnv = false;
public ConfigCenterBean() {
}
ConfigCenterConfig
public class ConfigCenterConfig extends AbstractConfig {
private AtomicBoolean inited = new AtomicBoolean(false);
private String protocol;
private String address;
private Integer port;
private String cluster;
private String namespace = "dubbo";
private String group = "dubbo";
private String username;
private String password;
private Long timeout = 3000L;
private Boolean highestPriority = true;
private Boolean check = true;
private String configFile = "dubbo.properties";
private String appConfigFile;
private Map parameters;
private Map externalConfiguration;
private Map appExternalConfiguration;
public ConfigCenterConfig() {
}
metadataReportConfig
public class metadataReportConfig extends AbstractConfig {
private static final long serialVersionUID = 55233L;
private static final String PREFIX_TAG = StringUtils.camelToSplitName(metadataReportConfig.class.getSimpleName().substring(0, metadataReportConfig.class.getSimpleName().length() - 6), "-");
private String address;
private String username;
private String password;
private Integer timeout;
private String group;
private Map parameters;
private Integer retryTimes;
private Integer retryPeriod;
private Boolean cycleReport;
private Boolean syncReport;
private Boolean cluster;
public metadataReportConfig() {
}
相关注解
@EnableDubbo:开启dubbo服务暴露与注入
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@documented
@EnableDubboConfig
@DubboComponentScan
public @interface EnableDubbo {
@AliasFor(
annotation = DubboComponentScan.class,
attribute = "basePackages"
)
String[] scanbasePackages() default {};
@AliasFor(
annotation = DubboComponentScan.class,
attribute = "basePackageClasses"
)
Class>[] scanbasePackageClasses() default {};
@AliasFor(
annotation = EnableDubboConfig.class,
attribute = "multiple"
)
boolean multipleConfig() default true;
}
@DubboService:服务暴露
@documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
@Inherited
public @interface DubboService {
Class> interfaceClass() default void.class;
String interfaceName() default "";
String version() default "";
String group() default "";
String path() default "";
boolean export() default true;
String token() default "";
boolean deprecated() default false;
boolean dynamic() default true;
String accesslog() default "";
int executes() default 0;
boolean register() default true;
int weight() default 0;
String document() default "";
int delay() default 0;
String local() default "";
String stub() default "";
String cluster() default "";
String proxy() default "";
int connections() default 0;
int callbacks() default 1;
String onconnect() default "";
String ondisconnect() default "";
String owner() default "";
String layer() default "";
int retries() default 2;
String loadbalance() default "random";
boolean async() default false;
int actives() default 0;
boolean sent() default false;
String mock() default "";
String validation() default "";
int timeout() default 0;
String cache() default "";
String[] filter() default {};
String[] listener() default {};
String[] parameters() default {};
String application() default "";
String module() default "";
String provider() default "";
String[] protocol() default {};
String monitor() default "";
String[] registry() default {};
String tag() default "";
Method[] methods() default {};
}
@DubboReference:服务引用
@documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.ANNOTATION_TYPE})
public @interface DubboReference {
Class> interfaceClass() default void.class;
String interfaceName() default "";
String version() default "";
String group() default "";
String url() default "";
String client() default "";
boolean generic() default false;
boolean injvm() default true;
boolean check() default true;
boolean init() default false;
boolean lazy() default false;
boolean stubevent() default false;
String reconnect() default "";
boolean sticky() default false;
String proxy() default "";
String stub() default "";
String cluster() default "";
int connections() default 0;
int callbacks() default 0;
String onconnect() default "";
String ondisconnect() default "";
String owner() default "";
String layer() default "";
int retries() default 2;
String loadbalance() default "";
boolean async() default false;
int actives() default 0;
boolean sent() default false;
String mock() default "";
String validation() default "";
int timeout() default 0;
String cache() default "";
String[] filter() default {};
String[] listener() default {};
String[] parameters() default {};
String application() default "";
String module() default "";
String consumer() default "";
String monitor() default "";
String[] registry() default {};
String protocol() default "";
String tag() default "";
String merger() default "";
Method[] methods() default {};
String id() default "";
String[] services() default {};
}
@Method:方法级别注解
@documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.ANNOTATION_TYPE})
@Inherited
public @interface Method {
String name();
int timeout() default -1;
int retries() default -1;
String loadbalance() default "";
boolean async() default false;
boolean sent() default true;
int actives() default 0;
int executes() default 0;
boolean deprecated() default false;
boolean sticky() default false;
boolean isReturn() default true;
String oninvoke() default "";
String onreturn() default "";
String onthrow() default "";
String cache() default "";
String validation() default "";
String merger() default "";
Argument[] arguments() default {};
}



