dubbo 服务调用说明
导入依赖
<!-- 服务注册与发现 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- 服务调用 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>
自动配置类
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<String> 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<String, ModuleConfig> modules = new LinkedHashMap();
private Map<String, RegistryConfig> registries = new LinkedHashMap();
private Map<String, ProtocolConfig> protocols = new LinkedHashMap();
private Map<String, MonitorConfig> monitors = new LinkedHashMap();
private Map<String, ProviderConfig> providers = new LinkedHashMap();
private Map<String, ConsumerConfig> consumers = new LinkedHashMap();
private Map<String, ConfigCenterBean> configCenters = new LinkedHashMap();
private Map<String, MetadataReportConfig> 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<RegistryConfig> 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<String, String> 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<RegistryConfig> 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<String, String> 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<String, String> 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<String, String> 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<String, String> parameters;
private Map<String, String> externalConfiguration;
private Map<String, String> 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<String, String> 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;
/** @deprecated */
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 {};
}