zoukankan      html  css  js  c++  java
  • 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来扫描其他的组件

  • 相关阅读:
    unity3d动态加载资源
    u3D大场景的优化
    C#代码规范
    游戏模型规范
    vue prop不同数据类型(数组,对象..)设置默认值
    vue-router实现页面的整体跳转
    Vue实现组件props双向绑定解决方案
    电脑连接并调试手机浏览器的网页
    对象里面的属性有值但是打印出来是空的,获取不到
    vue-cli sass安装
  • 原文地址:https://www.cnblogs.com/mzq123/p/12183142.html
Copyright © 2011-2022 走看看