一、使用springboot配置文件
1、导入dubbo-starter依赖。
<!-- dubbo依赖 -->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
2、在springboot配置文件中配置dubbo属性。
dubbo.application.name=springboot-service-provider
dubbo.registry.address=127.0.0.1:2181
dubbo.registry.protocol=zookeeper
dubbo.protocol.name=dubbo
dubbo.protocol.port=20881
dubbo.monitor.protocol=registry
3、使用@Service暴露服务。
import com.alibaba.dubbo.config.annotation.Service;
@Service //暴露服务
@Component
public class UserServiceImpl implements UserService {
}
4、使用@Reference远程调用服务。
import com.alibaba.dubbo.config.annotation.Reference;
@Service
public class OrderServiceImpl implements OrderService {
@Reference //远程调用服务
UserService userService;
}
5、使用@EnableDubbo开启dubbo功能,用来指定包扫描规则。
@EnableDubbo //开启dubbo功能
@SpringBootApplication
public class SpringbootServiceProviderApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootServiceProviderApplication.class, args);
}
}
或者也可以在springboot配置文件中配置包扫描规则,不用@EnableDubbo注解。
dubbo.scan.base-packages=com.atguigu.gmall
二、使用dubbo.xml配置文件
1、导入dubbo-starter依赖。
<!-- dubbo依赖 -->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
2、使用dubbo.xml配置文件provider.xml。不需要将dubbo配置在springboot的配置文件中。不需要使用@Service注解来暴露服务。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!-- 指定当前服务或应用的名字 -->
<dubbo:application name="springboot-service-provider"></dubbo:application>
<!-- 指定注册中心的位置 -->
<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"></dubbo:registry>
<!-- <dubbo:registry address="zookeeper://127.0.0.1:2181"></dubbo:registry> -->
<!-- 指定通信规则:通信协议和通信端口 -->
<dubbo:protocol name="dubbo" port="20881"></dubbo:protocol>
<!-- 暴露提供服务的接口,ref指向提供服务的接口的实现类 -->
<!-- timeout设置超时,调用的接口在指定时间内没有返回,立即终止;默认值是1000ms-->
<dubbo:service interface="com.atguigu.gmall.service.UserService"
ref="userServiceImpl" timeout="1000">
<!-- 方法级优先,接口次之,全局配置再次之。如果级别一致,消费方优先,提供方次之 -->
<dubbo:method name="getUserAddressList" timeout="1000"></dubbo:method>
</dubbo:service>
<!-- 统一设置服务提供方的规则 -->
<dubbo:provider timeout="1000"></dubbo:provider>
<!-- 提供服务的接口的实现类 -->
<bean id="userServiceImp" class="com.atguigu.gmall.service.impl.UserServiceImpl"></bean>
<!-- 监控中心配置:protocol="registry",表示从注册中心发现监控中心地址 -->
<dubbo:monitor protocol="registry"></dubbo:monitor>
<!-- <dubbo:monitor address="10.18.28.115:8088"></dubbo:monitor> -->
</beans>
3、使用@ImportResource(locations = “classpath:provider.xml”)导入dubbo的配置文件。不需要使用@EnableDubbo注解。
@ImportResource(locations = "classpath:provider.xml")
@SpringBootApplication
public class SpringbootServiceProviderApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootServiceProviderApplication.class, args);
}
}
三、使用注解API方式
1、导入dubbo-starter依赖。
<!-- dubbo依赖 -->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
2、用MyDubboConfig配置类代替配置文件。
/**
*dubbo配置类,用来代替配置文件中的dubbo配置
*/
@Configuration
public class MyDubboConfig {
@Bean
public ApplicationConfig applicationConfig() {
ApplicationConfig applicationConfig = new ApplicationConfig();
applicationConfig.setName("springboot-service-provider");
return applicationConfig;
}
//<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"></dubbo:registry>
@Bean
public RegistryConfig registryConfig() {
RegistryConfig registryConfig = new RegistryConfig();
registryConfig.setProtocol("zookeeper");
registryConfig.setAddress("127.0.0.1:2181");
return registryConfig;
}
//<dubbo:protocol name="dubbo" port="20882"></dubbo:protocol>
@Bean
public ProtocolConfig protocolConfig() {
ProtocolConfig protocolConfig = new ProtocolConfig();
protocolConfig.setName("dubbo");
protocolConfig.setPort(20881);
return protocolConfig;
}
/**
*<dubbo:service interface="com.atguigu.gmall.service.UserService"
ref="userServiceImpl01" timeout="1000" version="1.0.0">
<dubbo:method name="getUserAddressList" timeout="1000"></dubbo:method>
</dubbo:service>
*/
@Bean
public ServiceConfig<UserService> userServiceConfig(UserService userService){
ServiceConfig<UserService> serviceConfig = new ServiceConfig<>();
serviceConfig.setInterface(UserService.class);
serviceConfig.setRef(userService);
serviceConfig.setVersion("1.0.0");
//配置每一个method的信息
MethodConfig methodConfig = new MethodConfig();
methodConfig.setName("getUserAddressList");
methodConfig.setTimeout(1000);
//将method的设置关联到service配置中
List<MethodConfig> methods = new ArrayList<>();
methods.add(methodConfig);
serviceConfig.setMethods(methods);
//ProviderConfig
//MonitorConfig
return serviceConfig;
}
}
3、使用@Service暴露服务。
import com.alibaba.dubbo.config.annotation.Service;
@Service //暴露服务
@Component
public class UserServiceImpl implements UserService {
}
4、使用@DubboComponentScan(basePackages = “com.atguigu.gmall”) 或者@EnableDubbo(scanBasePackages = “com.atguigu.gmall”)配置要扫描的包路径。不需要使用@ImportResource(locations = “classpath:provider.xml”)。
@DubboComponentScan(basePackages = "com.atguigu.gmall")
@EnableDubbo(scanBasePackages = "com.atguigu.gmall")
@SpringBootApplication
public class SpringbootServiceProviderApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootServiceProviderApplication.class, args);
}
}