SpringBoot系列之集成Dubbo的方式


SpringBoot系列之集成Dubbo的方式

本博客介紹Springboot框架集成Dubbo實現微服務的3種常用方式,對於Dubbo知識不是很熟悉的,請先學習我上一篇博客:SpringBoot系列之集成Dubbo實現微服務教程,本博客只是對上篇博客的補充,上篇博客已經介紹過的就不重復介紹

還是使用上篇博客的例子,業務場景:

某個電商系統,訂單服務需要調用用戶服務獲取某個用戶的所有地址;
我們現在 需要創建兩個服務模塊進行測試

模塊 功能
訂單服務模塊 創建訂單等
用戶服務模塊 查詢用戶地址等
  • 測試預期結果:
    訂單服務web模塊在A服務器,用戶服務模塊在B服務器,A可以遠程調用B的功能

例子具體細節,請參考SpringBoot系列之集成Dubbo實現微服務教程,然后所謂的方式不同,其實主要就是對於配置文件使用的不同,按照這種差異,進行分類描述:

  • application.properties方式
    這種方式,同樣需要導入dubbo-starter,然后配置application即可

比如我的服務端配置:

#server.port=7010
        
dubbo.application.name=user-service-provider
dubbo.registry.address=127.0.0.1:2181
dubbo.registry.protocol=zookeeper

dubbo.protocol.name=dubbo
dubbo.protocol.port=20882

dubbo.monitor.protocol=registry
#dubbo.scan.base-packages=com.example.springboot.dubbo

然后對於暴露服務和引用服務,還是使用@Service【暴露服務】使用@Reference【引用服務】

  • xml配置文件方式
    在Springboot官方建議的還是使用application或者其它方式,不過只是建議,Springboot還是可以支持xml的

以服務提供者配置為例,新建一個provider.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://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">

	<!-- 1、指定當前服務/應用的名字(同樣的服務名字相同,不要和別的服務同名) -->
	<dubbo:application name="user-service-provider"></dubbo:application>
	
	<!-- 2、指定注冊中心的位置 -->
	<!-- <dubbo:registry address="zookeeper://127.0.0.1:2181"></dubbo:registry> -->
	<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"></dubbo:registry>
	
	<!-- 3、指定通信規則(通信協議 通信端口) -->
	<dubbo:protocol name="dubbo" port="20882"></dubbo:protocol>
	
	<!-- 4、暴露服務   ref:指向服務的真正的實現對象 -->
	<dubbo:service interface="com.test.dubbo.service.UserService" 
		ref="userServiceImpl01" timeout="1000" version="1.0.0">
		<dubbo:method name="getUserAddressList" timeout="1000"></dubbo:method>
	</dubbo:service>

	<!--統一設置服務提供方的規則  -->
	<dubbo:provider timeout="1000"></dubbo:provider>

	<!-- 服務的實現 -->
	<bean id="userServiceImpl01" class="com.test.dubbo.service.impl.UserServiceImpl"></bean>

	<!-- 連接監控中心 -->
	<dubbo:monitor protocol="registry"></dubbo:monitor>
	
</beans>

然后在application類或者其它自定義配置類里引用@ImportResource(locations="classpath:provider.xml")

對於xml方式進行使用的,可以參考我之前博客:Dubbo系列之服務注冊與發現

  • 全注解API的方式
    接着介紹全注解方式來實現,也即不使用application進行配置,也不使用xml配置文件,然后一些自定義配置總是要,那要怎么實現?這里可以通過寫一個Config類來實現
package com.example.springboot.dubbo.service.impl;

import org.apache.dubbo.config.*;
import com.example.spring.dubbo.service.UserService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.ArrayList;
import java.util.List;

@Configuration
public class MyDubboConfig {
	
	@Bean
	public ApplicationConfig applicationConfig() {
		ApplicationConfig applicationConfig = new ApplicationConfig();
		applicationConfig.setName("user-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(20882);
		return protocolConfig;
	}
	
	/**
	 *<dubbo:service interface="com.test.dubbo.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);
		
		return serviceConfig;
	}

	/**
	 * <dubbo:provider timeout="1000"></dubbo:provider>
	 */
	@Bean
	public ProviderConfig providerConfig(){
		ProviderConfig providerConfig = new ProviderConfig();
		providerConfig.setTimeout(1000);
		return providerConfig;
	}

	/**
	 * <dubbo:monitor protocol="registry"></dubbo:monitor>
	 */
	@Bean
	public MonitorConfig monitorConfig(){
		MonitorConfig monitorConfig = new MonitorConfig();
		monitorConfig.setProtocol("registry");
		return monitorConfig;
	}

}

每一個組件手動創建到容器中,讓dubbo來掃描其他的組件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM