- 一、dubbo概述
- 1. 基本架构
- 2. dubbo 支持的协议
- 二、直连方法
- 三、创建服务提供者
- 1. 思路
- 1. 创建maven web
- 2. pom.xml
- 3. 创建实体
- 4. 创建服务接口并实现
- 5. 配置服务提供者的核心配置文件
- 6. 添加监听器
- 7. 配置Tomcat
- 8. 安装本地jar到maven仓库
- 四、创建服务消费者
- 1. 思路
- 1. pom.xml
- 2. 配置服务消费者的核心配置文件
- 3. controller
- 4. applicationContext.xml
- 5. 配置中央调度器
- 6. 配置Tomcat
- 7. 配置测试页面
- 8. 测试
一、dubbo概述
Apache Dubbo 是一款高性能、轻量级的开源 Java RPC 框架,它提供了三大核心能力:
- 面向接口的远程方法调用,
- 智能容错和负载均衡,
- 服务自动注册和发现。
Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案、 服务治理方案。
官网:http://dubbo.apache.org/zh-cn/
特性:
面向接口代理:
调用接口的方法,在 A 服务器调用 B 服务器的方法,由 dubbo 实现对 B 的调用,无需关心实现的细节,就像 MyBatis 访问 Dao 的接口,可以操作数据库一样。不用关心 Dao 接口方法的实现
1. 基本架构
服务提供者(Provider):暴露服务的服务提供方,服务提供者在启动时,向注册中心注册自己提供的服务。
服务消费者(Consumer ): 调用远程服务的服务消费方,服务消费者在启动时,向注册中心订阅自己所需的服务,服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
注册中心(Registry) :注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者
监控中心(Monitor) :服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心
调用关系说明
- 服务容器负责启动,加载,运行服务提供者
- 服务提供者在启动时,向注册中心注册自己提供的服务
- 服务消费者在启动时,向注册中心订阅自己所需的服务
- 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者
- 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用
- 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心
2. dubbo 支持的协议
支持多种协议:dubbo , hessian , rmi , http, webservice , thrift , memcached , redis。dubbo 官方推荐使用 dubbo 协议。dubbo 协议默认端口 20880
使用 dubbo 协议,spring 配置文件加入:
二、直连方法
点对点的直连项目:消费者直接访问服务提供者,没有注册中心。消费者必须指定服务提供者的访问地址(url)
消费者直接通过 url 地址访问固定的服务提供者。这个 url 地址是不变的。
三、创建服务提供者
1. 思路
- 创建一个maven web工程:服务的提供者
- 创建一个实体bean查询的结果,实现Serializable接口
- 提供一个服务接口:xxxx
- 实现这个服务接口:xxxxImpl
- 配置dubbo服务提供者的核心配置文件
- 声明dubbo服务提供者的名称:保证唯一
- 声明dubbo使用的协议和端口号
- 暴露服务,使用直连方式
- 添加监听器
1. 创建maven web
2. pom.xml
添加了dubbo依赖
4.0.0
com.md
01-link-userservice-provider
1.0.0
war
UTF-8
1.8
1.8
junit
junit
4.11
test
org.springframework
spring-context
4.3.16.RELEASE
org.springframework
spring-webmvc
4.3.16.RELEASE
com.alibaba
dubbo
2.6.2
src/main/java
**/*.properties
**/*.xml
false
3. 创建实体
package com.md.dubbo.model;
import java.io.Serializable;
/**
* @author MD
* @create 2020-08-16 21:30
*/
// model实现序列化
public class User implements Serializable {
private Integer id;
private String username;
private Integer age;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
4. 创建服务接口并实现
package com.md.dubbo.service;
import com.md.dubbo.model.User;
/**
* @author MD
* @create 2020-08-16 21:35
*/
public interface UserService {
/**
* 根据用户标识获取用户信息
* @param id
* @return
*/
User queryUserById(Integer id);
}
//---------------------------------------
package com.md.dubbo.service.impl;
import com.md.dubbo.model.User;
import com.md.dubbo.service.UserService;
/**
* @author MD
* @create 2020-08-16 21:38
*/
public class UserServiceImpl implements UserService {
@Override
public User queryUserById(Integer id) {
// 模拟
User user = new User();
user.setId(id);
user.setUsername("pony");
user.setAge(20);
return user;
}
}
5. 配置服务提供者的核心配置文件
在resources目录下建立dubbo-userservice-provider.xml文件
这里注意:选择apache的这个
6. 添加监听器
在web.xml中
contextConfigLocation
classpath:dubbo-userservice-provider.xml
org.springframework.web.context.ContextLoaderListener
7. 配置Tomcat
端口号注意修改一下:
HTTP port :8081
JMX port:1098
8. 安装本地jar到maven仓库
服务接口中的方法要给消费者使用,消费者项目需要知道接口名称和接口中的方法名称、参数等。这些信息服务提供者才知道。需要把接口的 class 文件打包为 jar .
服务接口项目的类文件打包为 jar, 安装到 maven 仓库,仓库中的提供者 jar 可以被消费者使用。
使用 idea 的 maven 窗口执行 install
四、创建服务消费者
1. 思路
- 创建一个maven web工程:服务的消费者
- 配置pom文件:添加需要的依赖(spring,dubbo)
- 设置dubbo的核心配置文件
- 编写controller
- 配置中央调度器(就是一个servlet:DispatcherServlet)
基本和服务提供者一样,这里就说一些主要的
1. pom.xml
还是maven web项目
注意:添加了服务提供者的依赖
4.0.0
com.md
02-link-consumer
1.0.0
war
UTF-8
1.8
1.8
junit
junit
4.11
test
org.springframework
spring-context
4.3.16.RELEASE
org.springframework
spring-webmvc
4.3.16.RELEASE
com.alibaba
dubbo
2.6.2
com.md
01-link-userservice-provider
1.0.0
src/main/java
**/*.properties
**/*.xml
false
2. 配置服务消费者的核心配置文件
在resources目录下建立dubbo-consumer.xml文件
3. controller
package com.md.dubbo.web;
import com.md.dubbo.model.User;
import com.md.dubbo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* @author MD
* @create 2020-08-19 9:00
*/
@Controller
public class UserController {
// 自动注入
@Autowired
private UserService userService;
@RequestMapping(value = "/user")
public String userDetail(Model model , Integer id){
User user = userService.queryUserById(id);
model.addAttribute("user",user);
return "userDetail";
}
}
4. applicationContext.xml
在resources目录下创建spring配置文件
5. 配置中央调度器
在web.xml中
dispatcherServlet
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:applicationContext.xml,classpath:dubbo-consumer.xml
dispatcherServlet
/
6. 配置Tomcat
7. 配置测试页面
在webapp下 建立userDetail.jsp
<%--
Created by IntelliJ IDEA.
User: MD
Date: 2020/8/19
Time: 9:06
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
用户详情
用户详情
用户标识:${user.id}
用户名称:${user.username}
用户年龄:${user.age}
8. 测试
- 首先开服务提供者的Tomcat
- 然后开服务消费者的Tomcat
- 然后在地址栏输入,就可以看到了