Dubbo 与 SpringBoot 的三种整合方式

           接下来,介绍一下Dubbo与SpringBoot的三种zhen整合方式,详细的介绍,我都写在代码里面了。

一、服务提供方 

  1. 首先先看SpringBoot的Application启动应用,代码如下:
package com.nyist.produce;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ImportResource;

import com.alibaba.dubbo.config.spring.context.annotation.DubboComponentScan;
import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
/**
 * 
 * @author lhg
 *
 */
/**
 * Spring Boot与Dubbo整合的三种方式:
 * 	1.导入dubbo-starter,在application.properties配置属性,使用@Service【暴露服务】 使用@Reference 来引用服务
 *  2.保留dubbo xml配置文件,使用@ImportResource() 导入dubbo-starter,使用@ImportResource导入dubbo的配置文件即可。
 *  3.使用注解API的方式
 *  	将每一个组件手动创建到容器当中,让Dubbo扫面其他的组件
 * @author lvhaoguang
 *
 */
//开启基于注解的Dubbo
//@EnableDubbo          第一种方式下  使用
//@ImportResource(locations="classpath:provider.xml")     第二种方式使用
@EnableDubbo(scanBasePackages="com.nyist.produce")
@SpringBootApplication
public class BootUserServiceProviderApplication {

	public static void main(String[] args) {
		SpringApplication.run(BootUserServiceProviderApplication.class, args);
	}

}

     2.第一种方式下dubbo的配置方式:

dubbo:
  application:
    name: boot-user-service-provider  #服务的应用名
  registry:
    protocol: zookeeper     #协议名称
    address: 127.0.0.1:2181 #地址
  protocol:
    name: dubbo             #通信协议名称
    port: 20880             #通信协议端口   

  monitor:
    protocol: registry      #监控中心
    
    
  scan:
    base-packages:   包扫描   在配置文件开启包扫面  就不需要使用@EnableDubbo注解了

  3.第二种方式下,保留Dubbo.xml配置,使用@ImportResource()导入配置文件,xml配置文件如下:

<?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://dubbo.apache.org/schema/dubbo"
	xsi:schemaLocation="http://www.springframework.org/schema/beans        
		http://www.springframework.org/schema/beans/spring-beans-4.3.xsd        
		http://dubbo.apache.org/schema/dubbo        
		http://dubbo.apache.org/schema/dubbo/dubbo.xsd">

	1.指定当前服务/应用的名字(同样的服务名字相同,不要和别的服务同名)
	<dubbo:application name="boot-user-service-provider"></dubbo:application>
	
	2.指定注册服务中心的位置
	<dubbo:registry address="zookeeper://localhost:2181"></dubbo:registry>
	<dubbo:registry protocol="zookeeper" address="localhost:2181"></dubbo:registry>
	
	3.指定通信规则(通信协议,通信规则)
	<dubbo:protocol name="dubbo" port="20880"></dubbo:protocol>

	4.暴露服务 ref:指定服务的真正实现对象
	<dubbo:service interface="com.nyist.api.service.UserService" ref="userServiceImpl" version="1.0.0"></dubbo:service>
	服务的实现
	<bean id="userServiceImpl" class="com.nyist.produce.serviceImpl.UserServiceImpl"></bean>
	
	统一设置服务配置方的级别
	<dubbo:provider timeout="2000"></dubbo:provider>
	
	连接监控中心
	<dubbo:monitor address="registry"></dubbo:monitor>
	
</beans>

  4.第三种配置,使用API的方式配置,代码如下:

package com.nyist.produce.config;

import java.util.Arrays;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.alibaba.dubbo.config.ApplicationConfig;
import com.alibaba.dubbo.config.MethodConfig;
import com.alibaba.dubbo.config.ProtocolConfig;
import com.alibaba.dubbo.config.RegistryConfig;
import com.alibaba.dubbo.config.ServiceConfig;
import com.nyist.api.service.UserService;

@Configuration
public class DubboConfig {

	@Bean
	public ApplicationConfig applicationConfig(){
		ApplicationConfig applicationConfig = new ApplicationConfig();
		applicationConfig.setName("boot-orderservice-providers");
		return applicationConfig;
	}
	
	
	/**
	 * <dubbo:registry protocol="zookeeper" address="localhost:2181"></dubbo:registry>
	 */
	@Bean
	public RegistryConfig registryConfig(){
		RegistryConfig registryConfig = new RegistryConfig();
		registryConfig.setProtocol("zookeeper");
		registryConfig.setAddress("localhost:2181");
		return registryConfig;
	}
	
	/**
	 * <dubbo:protocol name="dubbo" port="20880"></dubbo:protocol>
	 */
	@Bean
	public ProtocolConfig protocolConfig(){
		ProtocolConfig protocolConfig = new ProtocolConfig();
		protocolConfig.setName("dubbo");
		protocolConfig.setPort(20880);
		return protocolConfig;
	}
	
	/**
	 * <!-- 4.暴露服务 ref:指定服务的真正实现对象-->
	<dubbo:service interface="com.nyist.api.service.UserService" ref="userServiceImpl" version="1.0.0"></dubbo:service>
	<!-- 服务的实现 -->
	<bean id="userServiceImpl" class="com.nyist.produce.serviceImpl.UserServiceImpl"></bean>
	 */
	@Bean
	public ServiceConfig<UserService> userviceConfig(UserService userService){
		ServiceConfig<UserService> userviceConfig = new ServiceConfig<UserService>();
		userviceConfig.setInterface(UserService.class);
		userviceConfig.setRef(userService);
		userviceConfig.setTimeout(1000);
		userviceConfig.setVersion("1.0.0");
		
		MethodConfig methodConfig = new MethodConfig();
		methodConfig.setName("getUserAddressList");
		methodConfig.setTimeout(2000);
		userviceConfig.setMethods(Arrays.asList(methodConfig));
		return userviceConfig;
	}
	
	/**
	 * <!-- 统一设置服务配置方的级别 -->
	<dubbo:provider timeout="2000"></dubbo:provider>
	
	<!-- 连接监控中心 -->
	<dubbo:monitor address="registry"></dubbo:monitor>
	 */
	
}

 5.生产者工程结构目录如下:

  Dubbo 与 SpringBoot 的三种整合方式

二、服务消费者

  1.同样的服务消费者也是这样,有三配置方式,一下基于第一种配置,配置服务消费者,如下:

dubbo:
  application:
    name: boot-order-service-consumer             #应用的名字
  registry:
    address: zookeeper://127.0.0.1:2181
    
  monitor:
    protocol: registry
 
    
    
server:
  port: 8081
  

  2.消费者结构目录如下:

   Dubbo 与 SpringBoot 的三种整合方式

 

三、运行结果

 

 结果如下:

Dubbo 与 SpringBoot 的三种整合方式

Dubbo 与 SpringBoot 的三种整合方式 Dubbo 与 SpringBoot 的三种整合方式

Dubbo 与 SpringBoot 的三种整合方式 Dubbo 与 SpringBoot 的三种整合方式 

 

源码下载:下载 

其中API模块忘记忘记放里面了,API模块在这个里边可以找到:API模块