图解: ( 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();
}
}