Dubbo系列八:与SpringBoot整合的三种方式

一、使用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);
	    }
	
	}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值