(Dubbo)02_Dubbo的使用

一、Doubbo的使用

Dubbo 基于容器 容器就是spring dubbo可以和spring 进行无缝整合
创建spring环境 引入dubbo即可使用
dubbo的使用步骤:

  1. 定义服务的提供者
    ①定义服务接口
    ②定义服务的实现
  2. 定义服务的消费者
    调用服务的提供者提供的服务
  3. 注册中心
    在这里插入图片描述
    推荐使用== Zookeeper 注册中心==
    将服务的提供者和服务的消费者注册到注册中心
    利用spring容器

二、搭建dubbo的环境:

使用zookeeper作为注册中心

zookeeper : 动物园管理员
hadoop(大象)  hive(蜜蜂) pig(猪) 

zookeeper 是一个分布式的 开源的程序协调服务 是hadoop项目的一个子项目 提供服务配置管理 命名服务 分布式锁 集群管理
服务配置管理

A  B  C 三个系统 分别使用不同的配置 但是配置中内容大同小异  如果需要修改配置项    工作任务大 修改完配置  还需要重启系统  
从所有配置中抽取出一个公共的   此时可以将公共的配置  放在zookeeper中  进行统一管理 
当需要修改的时候  你可以随意修改 修改完之后 不需要重启

命名服务
可以根据服务名称 检索到对应的服务
分布式锁
集群管理

在linux上安装zookeeper

  1. 上传zookeeper 到centos
  2. 解压
[root@localhost soft]# tar -zxvf apache-zookeeper-3.6.0-bin.tar.gz  -C /opt/programfiles/

在这里插入图片描述

  1. 进入zookeepr 目录 在conf中 将zoo_simple.cfg复制一份 复制为zoo.cfg
[root@localhost conf]# cp zoo_sample.cfg  zoo.cfg
  1. 修改配置在这里插入图片描述
  2. 启动zookeeper在这里插入图片描述
  3. 关闭命令在这里插入图片描述
  4. 查看zookeeper的状态在这里插入图片描述

三、创建项目

maven的聚合项目  
maven的聚合和继承
控制层模块
业务层模块
数据层模块
公共模块

①创建一个maven工程

dubbo-demo
接下创建他的子模块
在这里插入图片描述
工程结构:
在这里插入图片描述
子模块的pom文件中:
在这里插入图片描述
在父工程的pom文件中:
在这里插入图片描述

1.父工程的依赖(pom.xml)

<?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.rpc.dubbo</groupId>
    <artifactId>dubbo-demo</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>dubbo_interface</module>
        <module>dubbo-provider</module>
        <module>dubbo-consumer</module>
    </modules>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <spring.version>5.0.16.RELEASE</spring.version>
        <dubbo.version>2.6.0</dubbo.version>
        <zookeeper.version>3.6.0</zookeeper.version>
        <zkclient.version>0.1</zkclient.version>
    </properties>
<!--    依赖管理 父工程中主要管理模块的聚合 以及对整个工程中所用到的依赖的管理-->
    <dependencyManagement>
        <dependencies>
            <!-- Spring -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-beans</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aspects</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jms</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context-support</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <!-- dubbo相关 -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>dubbo</artifactId>
                <version>${dubbo.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.zookeeper</groupId>
                <artifactId>zookeeper</artifactId>
                <version>${zookeeper.version}</version>
            </dependency>
            <dependency>
                <groupId>com.github.sgroschupf</groupId>
                <artifactId>zkclient</artifactId>
                <version>${zkclient.version}</version>
            </dependency>
            <dependency>
                <groupId>javassist</groupId>
                <artifactId>javassist</artifactId>
                <version>3.11.0.GA</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.8.0</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
</project>

2.子模块dubbu-interface

2.1.引入依赖(pom.xml)

<?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>dubbo-demo</artifactId>
        <groupId>com.rpc.dubbo</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>dubbo_interface</artifactId>
    <dependencies>
        <!-- Spring -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jms</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
        </dependency>
        <!-- dubbo相关 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
        </dependency>
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
        </dependency>
        <dependency>
            <groupId>javassist</groupId>
            <artifactId>javassist</artifactId>
            <version>3.11.0.GA</version>
        </dependency>
    </dependencies>

</project>

2.2.定义接口

public interface UserService {
    public String sayHello(String name);
}

3.服务的提供者dubbo-provider

3.1.引入依赖(pom.xml)

 <dependencies>
<!--        依赖dubbo-intreface-->
        <dependency>
            <groupId>com.rpc.dubbo</groupId>
            <artifactId>dubbo_interface</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
    
    <build>
    <finalName>dubbo-provider</finalName>
    <plugins>
        <plugin>
            <groupId>org.apache.tomcat.maven</groupId>
            <artifactId>tomcat7-maven-plugin</artifactId>
            <version>2.2</version>
            <configuration>
                <!-- 指定端口 -->
                <port>8080</port>
                <!-- 请求路径 -->
                <path>/</path>
            </configuration>
        </plugin>
    </plugins>
</build>

3.2.实现接口

import com.alibaba.dubbo.config.annotation.Service;
import com.rpc.dubbo.service.UserService;
@Service
public class UserServiceImpl  implements UserService {
    @Override
    public String sayHello(String name) {
        return "hello " + name;
    }
}

3.3.配置容器

<?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://code.alibabatech.com/schema/dubbo
        http://code.alibabatech.com/schema/dubbo/dubbo.xsd
        ">
<!--    配置在dubbo中的服务的名称-->
    <dubbo:application name="hello_provider"/>
<!--    配置dubbo的注册中心-->
    <dubbo:registry address="zookeeper://192.168.124.7:2181"/>
<!--    所使用的协议及暴露服务的端口-->
    <dubbo:protocol name="dubbo" port="20880"></dubbo:protocol>
<!--    暴露的服务接口-->
    <dubbo:annotation package="com.rpc.dubbo.service.impl"></dubbo:annotation>

</beans>

3.4.web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath*:dubbo-provider.xml</param-value>
  </context-param>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
</web-app>

4.服务的消费者dubbo-consumer

4.1.引入依赖(pom.xml)

<?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>dubbo-demo</artifactId>
        <groupId>com.rpc.dubbo</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>dubbo-consumer</artifactId>
    <packaging>war</packaging>

    <name>dubbo-consumer Maven Webapp</name>
    <!-- FIXME change it to the project's website -->
    <url>http://www.example.com</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.rpc.dubbo</groupId>
            <artifactId>dubbo-interface</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

    <build>
        <finalName>dubbo-consumer</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <!-- 指定端口 -->
                    <port>8080</port>
                    <!-- 请求路径 -->
                    <path>/</path>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

4.2.编写处理器

import com.alibaba.dubbo.config.annotation.Reference;
import com.rpc.dubbo.service.UserService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/user")
public class UserController {
    @Reference
    private UserService userService;
    @RequestMapping("/say")
    public String  say(){
      return   userService.sayHello("Jack");
    }
}

4.3.配置容器

<?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"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://code.alibabatech.com/schema/dubbo
        http://code.alibabatech.com/schema/dubbo/dubbo.xsd
        http://www.springframework.org/schema/mvc
        https://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">
<!--    配置服务名称-->
    <dubbo:application name="hello_consumer"/>
<!--    配置注册中心0-->
    <dubbo:registry address="zookeeper://192.168.124.7:2181"/>
<!--    引用服务的接口-->
    <dubbo:annotation package="com.rpc.dubbo.controller"/>
<!--    mvc相关配置-->
    <mvc:annotation-driven/>
<!--    配置springmvc扫描的基础包-->
    <context:component-scan base-package="com.rpc.dubbo.controller"></context:component-scan>
</beans>

4.4.web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
  <!--    spring提供的处理字符集问题的过滤器-->
  <filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
      <param-name>forceRequestEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

  <servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath*:dubbo-consumer.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

②测试

  1. 进行modual的组装在这里插入图片描述在这里插入图片描述
  2. 启动服务的提供方在这里插入图片描述
  3. 启动服务的消费者
    启动方式同上
  4. 返回请求结果在这里插入图片描述

小结:

Dubbo 是一个RPC框架 主要用来做服务治理
Dubbo的核心概念:

注册中心
服务的提供者 provider
服务的消费者 consumer

在这里插入图片描述

四、Dubbo提供的管理端

为了能够更好的监控和管理dubbo服务 官方提供了一个可视化的监控程序
监控程序的下载:
https://github.com/apache/dubbo-admin
解压:
修改配置 基于spring-boot开发
修改注册中心地址:
incubator-dubbo-ops-master\dubbo-admin\src\main\resources\application.properties

在这里插入图片描述
打包dubbo-admin
incubator-dubbo-ops-master\dubbo-admin
打开命令行窗口cmd

mvn  package

在这里插入图片描述
打包之后 到target目录下
在这里插入图片描述
启动运行程序

java -jar dubbo-admin-0.0.1-SNAPSHOT.jar

进入程序
http://localhost:7001/
输入用户名和密码:root/root guest /guest
在这里插入图片描述
启动我们自己的服务的提供者和服务的消费者
在这里插入图片描述
服务的提供者在这里插入图片描述
在这里插入图片描述
服务的消费者
在这里插入图片描述

互联网的前沿技术 可以支撑我们的服务  提供高并发 访问
让我们的系统变得更加健壮   可维护性  可扩展行  
在面试中  是加分必考项。 一门技术薪资的浮动点500/月
发布了67 篇原创文章 · 获赞 6 · 访问量 1908

猜你喜欢

转载自blog.csdn.net/weixin_45801537/article/details/105053140