一、spring boot

作为spring家族中新成员,一出来就受到大家的欢迎,其基于Spirng 4.0和Servelet 3,实现免xml的方式,并将常用的Spring模块整合分组,不但提高了代码可读性,而且大大降低了代码编写难度。

二、dubbo

同样dubbo作为SOA治理框架,不但包含了服务提供者和消费者,还提供了管理平台、监控平台等等。在阿里开源后,立即受到了广大开发者的追捧。可惜的是由于阿里dubbo团队的解散,已经很久没有更新代码了,当前最新版本是2.5.4-SNAPSHOT

三、dubbox

很庆幸,由当当网等团队在dubbo基础上升级了dubbox版本,将Spring2.X升级到3.X,并支持基于Kryo和FST的高效序列化实现,支持REST等。

不过问题来了,dubbox还是只支持Spring3,而Spring boot要求Spring 4,因此需要升级dubbox支持4.0版本。

四、dubbox升级版,支持了Spring4.0,github地址:https://github.com/chentian610/dubbox

五、集成Spring boot和dubbox

   (1)、原来Spring集成dubbo的时候需要配置如下xml

	<dubbo:application name="demo-consumer" owner="programmer" organization="dubbox"/>
    	<dubbo:registry address="zookeeper://127.0.0.1:2181"/>
    	<dubbo:reference id="bidService" interface="com.alibaba.dubbo.demo.bid.BidService"/>
    	<dubbo:reference id="anotherUserRestService" interface="com.alibaba.dubbo.demo.user.facade.AnotherUserRestService"/>
  (2)、改成Spring boot后只需要一个java类即可,这里表示向注册中心zookeeper注册服务。

/**
 * Created by chentian610.
 */
@Configuration
@PropertySource("classpath:dubbo.properties")
public class DubboConfig {

    @Value("${dubbo.application.name}")
    private String dubbo_application_name;


    @Value("${dubbo.registry.address}")
    private String dubbo_registry_address;

    /**
     * 由《dubbo:application》转换过来
     **/
    @Bean
    public ApplicationConfig applicationConfig() {
        ApplicationConfig applicationConfig = new ApplicationConfig();
        applicationConfig.setLogger("slf4j");
        applicationConfig.setName(dubbo_application_name);
        return applicationConfig;
    }

    /**
    * 与<dubbo:annotation/>相当.提供方扫描带有@com.alibaba.dubbo.init.annotation.Reference的注解类
    * */
    @Bean
    public static AnnotationBean annotationBean() {
        AnnotationBean annotationBean = new AnnotationBean();
        annotationBean.setPackage("com.chentian610");//多个包可使用英文逗号隔开
        return annotationBean;
    }

    /**
     * 与<dubbo:registry/>相当
     * */
    @Bean
    public RegistryConfig registryConfig() {
        RegistryConfig registryConfig = new RegistryConfig();
        registryConfig.setAddress(dubbo_registry_address);
        return registryConfig;
    }
}
(3)、在pom.xml中添加Spring boot支持

 <!-- Spring boot start-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <!-- spring boot  默认的日志框架是Logback,所以在引用log4j2之前,需要先排除该包的依赖,再引入log4j2的依赖-->
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
            <scope>test</scope>
        </dependency>
        <dependency> <!-- 引入log4j2依赖 -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>
(4)、指定Spring boot启动类

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
		try {
			System.in.read();
		} catch (IOException e) {
			e.printStackTrace();
		}
    }
}
(5)、具体业务类中调用dubbo服务,只需要添加@Reference注解即可

	@Reference
	private GetuiService getuiService;

六、最后启动各自服务,贴上源码,欢迎大家交流chentian610



Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐