dubbo - 什么是dubbo? & dubbo的架构! & dubbo的入门程序!

图解: ( dubbo的作用: 系统(war包) 和 服务(war包) 的一个中间桥梁! )
                                    ( 没有dubbo , 系统层也就无法调用服务层)

在这里插入图片描述
分析:
       之前我们的系统层是war包 , 而服务层是jar包 , 所以可以直接使用系统层调用服务层 , 现在我们用的分布式架构 , 系统层是war包 , 服务层也是war包 , 故使用dubbo !
 

一、什么是Dubbo?

       Dubbox 是一个分布式服务框架,其前身是阿里巴巴开源项目Dubbo ,被国内电商及互联网项目中使用,后期阿里巴巴停止了该项目的维护,当当网便在Dubbo基础上进行优化,并继续维护,为了与原有的Dubbo区分,故将其命名为Dubbox。
       Dubbox 致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbox就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbox这样的分布式服务框架的需求,并且本质上就是用来服务调用 , 说白了就是个远程服务调用的分布式框架。

官方概述:
       Dubbo是一个高性能的 , 轻量的 , 基于java的RPC框架。

Apache Dubbo is a high-performance, light weight, java based RPC framework.

二、Dubbo的架构?

在这里插入图片描述

  • 1.provider:服务提供方:将接口地址暴露到注册中上。 ( 服务注册 )
  • 2.consumer:服务消费方:首先需要去监听注册中心,如注册中心上有服务消费方需要的服务,那么就可以直接去调用。( 服务发现 )
  • 3.registry:注册中心:容器(存放接口消息)。在dubbo中,可以作为注册中心的有:redis、multicast、zookeeper。
  • 4.container:容器(服务运行的容器: Tomcat)
  • 5.monitor:监控中心(软件 , 需要放在webapp下)

三、什么是分布式架构?

分布式架构: 就是将业务进行拆分!

  • 系统: 接受请求和响应数据! ( controller表现层 ) -> 打包方式war包
  • 服务: 进行业务逻辑的处理! ( service 业务层 ) -> 打包方式war包

四、dubbo的入门程序!

1.虚拟机上启动安装的zookeeper( 注册中心 )

在这里插入图片描述

2.服务( service层 - war包 )

2.1 pom.xml

maven工程中导入依赖的jar包 , 和配置tomcat插件 ( 端口号使用8081 )

2.2 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:dubbo-provider.xml</param-value>
  </context-param>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
</web-app>

2.3 dubbo-provider.xml

<?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:application name="dubbo-service" />
    <!-- 配置注册中心 -->
    <dubbo:registry address="zookeeper://192.168.200.128:2181" />
    <!-- 暴露服务地址 -->
    <dubbo:annotation package="com.jxj.service" />

</beans>

2.4 接口UserService.java

public interface UserService {
    public String showName();
}

2.5 实现类UserServiceImple.java

import com.alibaba.dubbo.config.annotation.Service;
import com.jxj.service.UserService;

@Service  // 导入阿里巴巴的service包!
public class UserServiceImpl implements UserService {

    @Override
    public String showName() {
        return "hello dubbo";
    }
}
3.系统( controller层 - war包 )

3.1 pom.xml

maven工程中导入依赖的jar包 , 和配置tomcat插件 ( 端口号使用8080 )
注: 端口号要和服务层的端口不一样 !

3.2 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">
         
  <!-- 配置前端控制器 -->
  <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:dubbo-consumer.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <!-- 拦截请求的url-->
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>

</web-app>

3.3 dubbo-consumer.xml

<?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:p="http://www.springframework.org/schema/p"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:mvc="http://www.springframework.org/schema/mvc"
       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://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <!-- 配置映射处理器和适配处理器 -->
    <mvc:annotation-driven />

    <!-- 1.配置服务名 -->
    <dubbo:application name="dubbo-consumer" />
    <!-- 2.配置注册中心 -->
    <dubbo:registry address="zookeeper://192.168.200.128:2181" />
    <!-- 3.发现服务 -->
    <dubbo:annotation package="com.jxj.controller" />
</beans>

3.4 公共接口UserService.java

public interface UserService {
    public String showName();
}

3.5 UserController.java

/**
 *   RestController:
 *       包含了Controller 和 ResponseBody.
 */
@RestController
@RequestMapping("/user")
public class UserController {

    @Reference  // 引用.
    public UserService userService;

    @RequestMapping("/showName.do")
    public String showName(){
        return userService.showName();
    }
}
发布了107 篇原创文章 · 获赞 173 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/qq_42986107/article/details/85042243