Dubbo

1.大型互联网项目架构目标

大型互联网项目架构目标
互联网项目特点:

  • 用户多
  • 流量大,并发高
  • 海量数据
  • 易受攻击
  • 功能繁琐
  • 变更快

高性能:提供快速的访问体验

        

  • 高性能:提供快速的访问体验。
  • 高可用:网站服务一直可以正常访问。
  • 可伸缩:通过硬件增加/减少,提高/降低处理能力。
  • 高可扩展:系统间耦合低,方便的通过新增/移除方式,增加/减少新的功能/模块。
  • 安全性:提供网站安全访问和数据加密,安全存储等策略,
  • 敏捷性:随需应变,快速响应。

2.集群和分布式

集群和分布式
        集群:很多“人”一起 ,干一样的事。
                一个业务模块,部署在多台服务器上。
        分布式:很多“人”一起,干不一样的事。这些不一样的事,合起来是一件大事。
                一个大的业务系统,拆分为小的业务模块,分别部署在不同的机器上。

3.架构演进

 

4. Dubbo概述

  •          Dubbo是阿里巴巴公司开源的一个高性能、轻量级的 Java RPC 框架。
  •         致力于提供高性能和透明化的 RPC 远程服务调用方案,以及 SOA 服务治理方案。
  •         官网:http://dubbo.apache.org


5. Dubbo快速入门

 ZooKeeper安装ZooKeeper 尚硅谷TTP-CSDN博客

 本地spring,spring MVC

 

dubbo-sevice   dubbo-web两个模块

1.   dubbo-web   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.itdoujiang</groupId>
    <artifactId>dubbo-web</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <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>
        <!--  servlet3.0规范的坐标  -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <!-- spring的坐标 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!-- springmvc的坐标 -->
        <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>
        <!-- Dubbo的起步依赖,版本2.7之后统一为rg.apache.dubb  -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
            <version>${dubbo.version}</version>
        </dependency>
        <!-- ZooKeeper客户端实现  -->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>${zookeeper.version}</version>
        </dependency>
        <!-- ZooKeeper客户端实现  -->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>${zookeeper.version}</version>
        </dependency>

    </dependencies>
    <build>
        <plugins>
            <!-- tomcat插件 -->
            <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>


</project>

 

2. dubbo-service  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.itdoujiang</groupId>
    <artifactId>dubbo-service</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <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>
        <!--  servlet3.0规范的坐标  -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <!-- spring的坐标 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!-- springmvc的坐标 -->
        <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>
        <!-- Dubbo的起步依赖,版本2.7之后统一为rg.apache.dubb  -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
            <version>${dubbo.version}</version>
        </dependency>
        <!-- ZooKeeper客户端实现  -->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>${zookeeper.version}</version>
        </dependency>
        <!-- ZooKeeper客户端实现  -->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>${zookeeper.version}</version>
        </dependency>

    </dependencies>
    <build>
        <plugins>
            <!-- tomcat插件 -->
            <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>


</project>

3.  dubbo-service 下 com.itdoujiang.Servicer.UserService

 

4.impl.UserServiceimpl

 5.resources

<?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://dubbo.apache.org/schema/dubbo" 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://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

	<context:component-scan base-package="com.itdoujiang.service"/>

</beans>

 6.dubbo-web    main.webapp.WEB-INF.web.xml

 

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         version="2.5">

		 
	<!-- spring -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:spring/applicationContext*.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
		 
	<!-- Springmvc -->	 
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- 指定加载的配置文件 ,通过参数contextConfigLocation加载-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring/springmvc.xml</param-value>
        </init-param>
    </servlet>

    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>


</web-app>

爆红 

        <!--依赖一下Servicce-->
        <dependency>
            <groupId>com.itdoujiang</groupId>
            <artifactId>dubbo-service</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

 

 

 爆红 

<?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://dubbo.apache.org/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://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
         http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

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

</beans>

 7.com.itdoujiang.controller.UserController

 

 

package com.itdoujiang.controller;

import com.itdoujiang.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Author:豆浆
 * @name :UserController
 * @Date:2024/4/24 10:33
 */
@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    //注入Service
    private UserService userService;

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

 8. 安装

9.运行 

 

 

 

服务提供者

1.修改@Service 

package com.itdoujiang.service.impl;

import com.itdoujiang.service.UserService;
import org.apache.dubbo.config.annotation.Service;

/**
 * @Author:豆浆
 * @name :UserServiceImpl
 * @Date:2024/4/24 10:17
 */
//@Service  将该类的对象创建出来,放到Spring的IOC容器中 bean定义

@Service   //将这个类提供的方法(服务)对外发布,将访问的地址 ip,端口,路径注册到注册中心中
public class UserServiceImpl implements UserService {
    public String sayHello() {
        return "Hello Dubbo";
    }
}

2.Dubbo的配置

 

<?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://dubbo.apache.org/schema/dubbo"
	   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://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

	<!--<context:component-scan base-package="com.itdoujiang.service"/>-->

	<!--Dubbo的配置-->
	<!--1.配置项目的名称 ,唯一-->
	<dubbo:application name="dubbo-service"/>
	<!--2.配置zookeeper的地址-->
	<dubbo:registry address="zookeeper://192.168.200.130:2181"/>
	<!--3.配置dubbo包扫描-->
	<dubbo:annotation package="com.itdoujiang.service.impl"/>


</beans>

 3.mian.webapp.WEB-INF.web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         version="2.5">

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

</web-app>

 4.运行

服务消费者

 1.注释

简单的

2.service.UserService

package com.itdoujiang.service;

import org.apache.dubbo.config.annotation.Service;

/**
 * @Author:豆浆
 * @name :UserService
 * @Date:2024/4/24 11:28
 */
@Service
public interface UserService {
    public String sayHello();

}

 

3.删除

 4.远程注入

package com.itdoujiang.controller;

import com.itdoujiang.service.UserService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Author:豆浆
 * @name :UserController
 * @Date:2024/4/24 10:33
 */
@RestController
@RequestMapping("/user")
public class UserController {

    //@Autowired  //本地注入
    //注入Service

    /*
    *       1.从zookeeper注册中心获取userservice的访问url
            2进行远程调用RPC
            3.将结果封装为一个代理对象。给变量赋值
    * */
    @Reference  //远程注入
    private UserService userService;

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

5. -Dubbo的配置

<?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://dubbo.apache.org/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://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
         http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

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


    
    <!--Dubbo的配置-->
    <!--1.配置项目的名称 ,唯一-->
    <dubbo:application name="dubbo-web"/>
    <!--2.配置zookeeper的地址-->
    <dubbo:registry address="zookeeper://192.168.200.130:2181"/>
    <!--3.配置dubbo包扫描-->
    <dubbo:annotation package="com.itdoujiang.controller"/>


</beans>

 6.运行

 

正确的

 

删除dubbo-service UserService        -----------         dubbo-web UserService

依赖公共的接口模块   dubbo-service pom.xml        -----------         dubbo-web pom.xml

        <!--依赖公共的接口模块-->
        <dependency>
            <groupId>com.itdoujiang</groupId>
            <artifactId>dubbo-interface</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

6. Dubbo高级特性

 6.1dubbo-admin管理平台

 

 

**1、环境准备**

        dubbo-admin 是一个前后端分离的项目。前端使用vue,后端使用springboot,安装 dubbo-admin 其实就是部署该项目。我们将dubbo-admin安装到开发环境上。要保证开发环境有jdk,maven,nodejs

安装node**(如果当前机器已经安装请忽略)**

https://nodejs.org/en/

因为前端工程是用vue开发的,所以需要安装node.js,node.js中自带了npm,后面我们会通过npm启动

**2、下载 Dubbo-Admin**

进入github,搜索dubbo-admin

下载:

https://github.com/apache/dubbo-admin

**3、把下载的zip包解压到指定文件夹(解压到那个文件夹随意)**

**4、修改配置文件**

解压后我们进入…\dubbo-admin-develop\dubbo-admin-server\src\main\resources目录,找到 **application.properties** 配置文件 进行配置修改

修改zookeeper地址

  • admin.registry.address注册中心
  • admin.config-center 配置中心
  • admin.metadata-report.address元数据中心

**5、打包项目**

在 dubbo-admin-develop 目录执行打包命令

shift+右键

mvn clean package

**6、启动后端**

切换到目录

执行下面的命令启动 dubbo-admin,dubbo-admin后台由SpringBoot构建。

java -jar .\dubbo-admin-0.1.jar

 

**7、前台后端**

dubbo-admin-ui 目录下执行命令

npm run dev

**8、访问**

浏览器输入。用户名密码都是root

 http://localhost:8081

## 二、dubbo-admin简单使用

注意:Dubbo Admin【服务Mock】【服务统计】将在后续版本发布....

在上面的步骤中,我们已经进入了Dubbo-Admin的主界面,在【快速入门】章节中,我们定义了服务生产者、和服务消费者,下面我们从Dubbo-Admin管理界面找到这个两个服务

**1、点击服务查询**

**2、查询结果**

A:输入的查询条件com.itheima.service.UserService

B:搜索类型,主要分为【按服务名】【按IP地址】【按应用】三种类型查询

C:搜索结果

**3.1.4 dubo-admin查看详情**

我们查看com.itheima.service.UserService (服务提供者)的具体详细信息,包含【元数据信息】

**1)点击详情**

从【详情】界面查看,主要分为3个区域

A区域:主要包含服务端 基础信息比如服务名称、应用名称等

B区域:主要包含了生产者、消费者一些基本信息

**C区域:是元数据信息,注意看上面的图,元数据信息是空的**

我们需要打开我们的生产者配置文件加入下面配置

	<!--元数据配置-->
	<dubbo:metadata-report address="zookeeper://192.168.200.130:2181"/>

 

        重新启动生产者,再次打开Dubbo-Admin

        这样我们的元数据信息就出来了


6.2dubbo 常用高级配置

        6.2.1  序列化

 

         

 1.定义一个模块

2.定义一个类

package com.itdoujiang.pojo;



/**
 * @Author:豆浆
 * @name :User
 * @Date:2024/4/24 14:23
 */

public class User {
    private int id;
    private String username;
    private String password;


    public User() {
    }

    public User(int id, String username, String password) {
        this.id = id;
        this.username = username;
        this.password = password;
    }

    /**
     * 获取
     * @return id
     */
    public int getId() {
        return id;
    }

    /**
     * 设置
     * @param id
     */
    public void setId(int id) {
        this.id = id;
    }

    /**
     * 获取
     * @return username
     */
    public String getUsername() {
        return username;
    }

    /**
     * 设置
     * @param username
     */
    public void setUsername(String username) {
        this.username = username;
    }

    /**
     * 获取
     * @return password
     */
    public String getPassword() {
        return password;
    }

    /**
     * 设置
     * @param password
     */
    public void setPassword(String password) {
        this.password = password;
    }

    public String toString() {
        return "User{id = " + id + ", username = " + username + ", password = " + password + "}";
    }
}

 

3.dubbo-interface   添加依赖

        <!--添加依赖dubbo-interface-->
        <dependency>
            <groupId>com.itdoujiang</groupId>
            <artifactId>dubbo-pojo</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

4.dubbo-interface   UserService   添加      查询用户

    /*
    * 查询用户
    * */
    public User fingUserById(int id);

5.dubbo-service 服户的提供者中实现

 


    public User fingUserById(int id) {
        //查询user对象
        User user=new User(1,"zhangsan","123");
        return user;
    }

5.dubbo-web 服户的消费者中实现

/**
     * 根据id查询用户信息
     * @param id
     * @return
     */
    @RequestMapping("find")
    public User find(int id){
        return userService.fingUserById(id);
    }

6.测试  dubbo-interface  dubbo-pojo  都     clean  install    一下

 

6.2.2地址缓存

6.2.3  超时

 

两种:

1.在服务提供方

 2.在服务消费方

推荐一 


6.2.4  重试

 

同上 


6.2.5  多版本

 


6.2.6  负载均衡

 

 

 注意修改端口


6.2.7  集群容错

 


6.2.8  服务降级

 

force:return null
fail:return null

相关推荐

  1. <span style='color:red;'>dubbo</span>

    dubbo

    2024-04-24 18:38:02      33 阅读
  2. <span style='color:red;'>Dubbo</span>

    Dubbo

    2024-04-24 18:38:02      37 阅读
  3. <span style='color:red;'>Dubbo</span>

    Dubbo

    2024-04-24 18:38:02      11 阅读
  4. Dubbo学习

    2024-04-24 18:38:02       34 阅读
  5. zk_<span style='color:red;'>dubbo</span>

    zk_dubbo

    2024-04-24 18:38:02      40 阅读
  6. Dubbo_入门

    2024-04-24 18:38:02       29 阅读
  7. Dubbo(一)

    2024-04-24 18:38:02       18 阅读
  8. Dubbo RPC-Redis协议

    2024-04-24 18:38:02       42 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-24 18:38:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-24 18:38:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-24 18:38:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-24 18:38:02       18 阅读

热门阅读

  1. jvm学习笔记

    2024-04-24 18:38:02       9 阅读
  2. 快速制作个人电子签名

    2024-04-24 18:38:02       8 阅读
  3. TypeScript学习笔记7-枚举

    2024-04-24 18:38:02       10 阅读
  4. TCP案例-实时群聊

    2024-04-24 18:38:02       9 阅读
  5. AIGC技术/趋势

    2024-04-24 18:38:02       9 阅读
  6. Git泄露

    Git泄露

    2024-04-24 18:38:02      13 阅读
  7. 面向对象设计模式

    2024-04-24 18:38:02       11 阅读