Duboo-入门到学废【上篇】

目录

1🥞.什么是duboo

2🌭.架构图

3.🍿快速入门 

4.🧇浅浅理解


1.什么是duboo🤶🤶🤶

Dubbo是一个由阿里巴巴开发的基于Java的开源RPC框架。它提供了高性能、透明化的远程方法调用,以及服务自动注册和发现、负载均衡、容错、限流、监控等功能,使得分布式应用开发变得更加简单。Dubbo广泛应用于阿里巴巴内部服务化架构,也是国内外很多大型互联网公司的首选框架之一。 

2.架构图🤶🤶🤶

  1. Provider:暴露服务的服务提供方
  2. Container:服务运行容器
  3. Consumer:调用远程服务的服务消费方
  4. Registry:服务注册与发现的注册中心
  5. Monitor:统计服务的调用次数和调用时间的监控中心

3.快速入门 🤶🤶🤶

基本步骤:

  • ①创建服务提供者Provider模块
  • ②创建服务消费者Consumer模块
  • ③在服务提供者模块编写UserServicelmpl 提供服务
  • ④在服务消费者中的UserController远程调用UserServicelmpl 提供的服务
  • ⑤分别启动两个服务,测试

3.1user-api 💕💕

创建一个模块作为公共接口

public interface UserService {
    public String say();
}

3.2user-service 💕💕

创建逻辑模块

1.导入依赖:

1.引入user-api,

2.tomcat端口为9000

   <properties>
        <spring.version>5.1.9.RELEASE</spring.version>
        <dubbo.version>2.7.4.1</dubbo.version>
        <zookeeper.version>4.0.0</zookeeper.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.21</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.21</version>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
            <version>${dubbo.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>${zookeeper.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>${zookeeper.version}</version>
        </dependency>

        <dependency>
            <groupId>org.example</groupId>
            <artifactId>user-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>


    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.1</version>
                <configuration>
                    <port>9000</port>
                    <path>/</path>
                </configuration>
            </plugin>
        </plugins>
    </build>

 2.创建spring.xml:

配置zookeeper(注册中心)的 ip地址和端口

     <!--项目名称-->
    <dubbo:application name="dubbo-service"></dubbo:application>
    <!--注册中心zookeeper地址-->
    <dubbo:registry address="zookeeper://192.168.20.130:2181"></dubbo:registry>
    <dubbo:annotation package="com.xz.service.impl"></dubbo:annotation>

3.配置web.xml

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:spring*.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

 4.逻辑代码实现

@Service//将这个类提供的方法,对外发布,将访问的地址 ip 端口,注册到注册中心中
public class UserServiceImpl implements UserService {
    @Override
    public String say() {
        return "hello xiaoZhang~";
    }
}

3.3user-web💕💕

创建一个模块,作为访问层接口 

 1.导入依赖

1.引入user-api,

2.tomcat端口为8000


    <properties>
        <spring.version>5.1.9.RELEASE</spring.version>
        <dubbo.version>2.7.4.1</dubbo.version>
        <zookeeper.version>4.0.0</zookeeper.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.21</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.21</version>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
            <version>${dubbo.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>${zookeeper.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>${zookeeper.version}</version>
        </dependency>

        <dependency>
            <groupId>org.example</groupId>
            <artifactId>user-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

    </dependencies>


    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.1</version>
                <configuration>
                    <port>8000</port>
                    <path>/</path>
                </configuration>
            </plugin>
        </plugins>
    </build>

 2.配置web.xml

<!--springmvc-->
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>

3.配置springmvc.xml

引入zookeeper(注册中心)的ip地址和端口,以及要扫描的包

  <mvc:annotation-driven/>
    <context:component-scan base-package="com.xz.controller"></context:component-scan>

    <!--项目名称-->
    <dubbo:application name="dubbo-web"></dubbo:application>
    <!--注册中心zookeeper地址-->
    <dubbo:registry address="zookeeper://192.168.20.130:2181"></dubbo:registry>
    <dubbo:annotation package="com.xz.controller"></dubbo:annotation>

4.controller接口实现

  • @Reference的作用:
  • 1.从zookeeper(注册中心)获取userService的访问url
  • 2.进行远程调用RPC
  • 3.将结果封装为代理对象,给变量赋值
@RestController
@RequestMapping("/user")
public class UserController {

    
    @Reference//远程注入
    private UserService userService;

    @RequestMapping("/say")
    public String say(){
        return userService.say();
    }

}

 3.4加载运行插件💕💕

注意:在启动插件时,一定要先clear 和install 父项目的,然后依次执行,最后在启动tomcat7-run

不然你会痛苦的~

  

 至此~dubbo部署成功!!!

4.浅浅理解🤶🤶🤶

对于服务与消费的理解:相对于之前的dao,service,controller的三层架构,如今服务就是service,controller就是消费者;与此同时,每个服务都可以独立开发、部署和维护

 

相关推荐

  1. 今天,你了么

    2023-12-28 06:00:02       35 阅读
  2. Dubbo_入门

    2023-12-28 06:00:02       30 阅读
  3. 从基础入门穿C++

    2023-12-28 06:00:02       22 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-28 06:00:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-28 06:00:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-28 06:00:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-28 06:00:02       20 阅读

热门阅读

  1. 【WinForm.NET开发】使用鼠标事件

    2023-12-28 06:00:02       46 阅读
  2. Elasticsearch之常用DSL语句

    2023-12-28 06:00:02       36 阅读
  3. uniapp 分页

    2023-12-28 06:00:02       39 阅读
  4. QT C++ TCP Socket 请求心知天气

    2023-12-28 06:00:02       47 阅读
  5. linux统计文件数量命令

    2023-12-28 06:00:02       41 阅读
  6. 记录 | python with用法及原理

    2023-12-28 06:00:02       42 阅读
  7. cfa一级考生复习经验分享系列(十二)

    2023-12-28 06:00:02       39 阅读
  8. 面试经典150题(50-53)

    2023-12-28 06:00:02       35 阅读
  9. Day01-Ajax

    2023-12-28 06:00:02       36 阅读
  10. MySQL5.7服务器系统变量(二)

    2023-12-28 06:00:02       33 阅读