文章目录

 

微服务技术→Dubbo分布式服务治理框架-SpringBoot整合Dubbo(三)

1 目录结构

微服务技术→Dubbo分布式服务治理框架-SpringBoot整合Dubbo(三)_xml

- itmayiedu-dubbo-parent
-- itmayiedu-dubbo-api
---- itmayiedu-dubbo-api-member
-- itmayiedu-dubbo-api-member-impl  → 生产者
--	itmayiedu-dubbo-api-order-impl  → 消费者

2 实现步骤

2.1 创建父模块 itmayiedu-dubbo-parent

2.1.1 添加Maven依赖信息

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.itmayiedu</groupId>
    <artifactId>itmayiedu-dubbo-parent</artifactId>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>itmayiedu-dubbo-api</module>
        <module>itmayiedu-dubbo-api/itmayiedu-dubbo-api-member</module>
        <module>itmayiedu-dubbo-api-member-impl</module>
        <module>itmayiedu-dubbo-api-order-impl</module>
    </modules>
    <packaging>pom</packaging>


    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.1.RELEASE</version>
    </parent>

    <!-- -统一编写版本的控制 -->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <curator-framework.version>4.0.1</curator-framework.version>
        <zookeeper.version>3.4.13</zookeeper.version>
        <dubbo.starter.version>0.2.0</dubbo.starter.version>
    </properties>

    <dependencies>
        <!-- SpringBoot整合Web组件 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>


        <!-- -如果在使用SpringBoot项目的时候 如果整合的依赖信息不需要写版本说明 springboot 已经帮你整合好了 -->
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <!-- 阿里 巴巴写 springboot 整合dubbo组件 -->
            <version>${dubbo.starter.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

2.2 创建API模块的父模块 itmayiedu-dubbo-api

2.3 创建API模块 itmayiedu-dubbo-api-member

2.3.1 创建接口类 IMemberService

package com.itmayiedu.api.member;

public interface IMemberService {
    public String getUser();
}

2.4 创建API模块 itmayiedu-dubbo-api-member 的实现模块 itmayiedu-dubbo-api-member-impl

2.4.1 添加Maven依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>itmayiedu-dubbo-parent</artifactId>
        <groupId>com.itmayiedu</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>itmayiedu-dubbo-api-member-impl</artifactId>

    <dependencies>
        <dependency>
            <groupId>com.itmayiedu</groupId>
            <artifactId>itmayiedu-dubbo-api-member</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
</project>

2.4.2 接口的实现类 MemberServiceImpl

package com.itmayiedu.api.member.impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.itmayiedu.api.member.IMemberService;
import org.springframework.beans.factory.annotation.Value;


// 注意:@Service 注解引入为阿里巴巴注解
@Service
public class MemberServiceImpl implements IMemberService {

    @Value("${dubbo.protocol.port}")
    private String dubboPort;

    @Override
    public String getUser() {
        return "订单服务调用会员服务接口, dubbo端口号为:→" + dubboPort;
    }
}

2.4.3 添加application.yml

###服务器端口号
server:
  port: 90
###dubbo 注册到到注册中心名称
dubbo:
  application:
    name: member
  ###采用协议协议方式和端口号  
  protocol:
  ###采用dubbo协议
    name: dubbo
  ###发布dubbo端口号为20880  
    port: 20880
  registry:
  ###dubbo 注册中心地址
    address: zookeeper://127.0.0.1:2181

2.4.4 创建启动类


package com.itmayiedu.api;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;


@EnableDubbo
@SpringBootApplication
public class AppMember {

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

}

2.5 创建 itmayiedu-dubbo-api-order-impl模块

2.5.1 添加Maven依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>itmayiedu-dubbo-parent</artifactId>
        <groupId>com.itmayiedu</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>itmayiedu-dubbo-api-member-impl</artifactId>

    <dependencies>
        <dependency>
            <groupId>com.itmayiedu</groupId>
            <artifactId>itmayiedu-dubbo-api-member</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
</project>

2.5.2 创建 OrderController


package com.itmayiedu.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import com.itmayiedu.api.member.IMemberService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


@RestController
public class OrderController {
	// 使用该	@Reference调用dubbo接口
	@Reference
	private IMemberService iMemberService;

	@RequestMapping("/orderToMember")
	public String orderToMember() {
		return iMemberService.getUser();
	}

	

}

2.5.3 创建启动类


package com.itmayiedu;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;

@EnableDubbo
@SpringBootApplication
public class AppOrder {
	public static void main(String[] args) {
		SpringApplication.run(AppOrder.class, args);
	}
}

2.5.4 添加application.yml

server:
  port: 8081
###dubbo 注册服务名称
dubbo:
  application:
    name: order
  registry:
    address: zookeeper://localhost:2181
    #### 调用服务超时时间
  consumer:
    timeout: 5000

3 启动顺序

3.1 先启动Zookeeper注册中心

3.2 启动生产者模块(itmayiedu-dubbo-api-member-impl)

3.3 启动消费者模块(itmayiedu-dubbo-api-order-impl)

3.4 浏览器访问 http://127.0.0.1:8081/orderToMember

微服务技术→Dubbo分布式服务治理框架-SpringBoot整合Dubbo(三)_xml_02

4 测试负载均衡效果

4.1 修改生产者模块(itmayiedu-dubbo-api-member-impl)的yml文件

server:
  port: 8092
dubbo:
  application:
    name: member
  protocol:
    name: dubbo
    port: 20882
  registry:
    address: zookeeper://127.0.0.1:2181
  scan:
    base-packages: com.itmayiedu.api.member.impl

注意 两个端口都有改变 server端口 和dubbo端口

4.2 再用新的配置文件启动一个生产者服务

4.3 浏览器访问 http://127.0.0.1:8081/orderToMember

4.4 再此访问

微服务技术→Dubbo分布式服务治理框架-SpringBoot整合Dubbo(三)_zookeeper_03

微服务技术→Dubbo分布式服务治理框架-SpringBoot整合Dubbo(三)_zookeeper_04


5 SpringCloud与Dubbo区别

为什么放弃Dubbo 使用SpringCloud?

相同点:SpringCloud 和Dubbo可以实现RPC远程调用框架,可以实现服务治理。

不同点:
SpringCloud是一套目前比较完善的微服务框架了,整合了分布式常用解决方案, 注册中心Eureka、负载均衡器Ribbon ,客户端调用工具Rest和Feign,分布式配置中心Config,服务保护Hystrix,网关Zuul Gateway ,服务链路Zipkin,消息总线Bus等。

从架构上分析
Dubbo内部实现功能没有SpringCloud强大,只是实现服务治理,缺少分布式配置中心、网关、链路、总线等,如果需要用到这些组件,需要整合其他框架。

从更新迭代速度分析
Dubbo目前更新速度没有SpringCloud快,到SpringCloud2.0后SpringCloud会越来完善和稳定。

从开发背景角度分析
Dubbo的开发背景是阿里巴巴, 在中国也推出了非常多的优秀的开源框架
但是在SpringCloud的背景是Spring家族,Spring是专注于企业级开源框架开发,在中国,或者在整个世界上Spring框架都应用的非常广泛。所有相对来说SpringCloud的背景比Dubbo更加强大。

最后总结下
如果学习Dubbo的话,学习其他的分布式解决方案需要自己组装,反而如果学习SpringCloud,它已经把整个常用分布式解决都整合好了。