Dubbo框架、用户注册、单点登录系统、用户登出、购物车系统、设置拦截器,实现用户权限校验、ThreadLocal、订单系统模块

本文详细介绍了京淘项目的Dubbo框架改造,包括Dubbo的特点、入门案例、负载均衡策略。同时讲解了用户模块的实现,如用户注册、单点登录、退出操作。此外,还涉及购物车模块的功能实现,如商品详情、购物车列表、数量修改、新增和删除。最后,阐述了京淘权限的实现,利用拦截器和ThreadLocal进行用户权限校验。
摘要由CSDN通过智能技术生成

一、Dubbo框架

1、Dubbo介绍

Apache Dubbo |ˈdʌbəʊ| 是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
在这里插入图片描述

2、Dubbo特点

在这里插入图片描述

3、Dubbo框架入门案例

3.1、定义公共接口项目

说明:接口项目一般定义公共的部分,并且被第三方依赖.
在这里插入图片描述

3.2、服务提供者介绍

3.2.1、提供者代码结构

在这里插入图片描述

3.2.2、编辑实现类
package com.jt.dubbo.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;

import com.alibaba.dubbo.config.annotation.Service;
import com.jt.dubbo.mapper.UserMapper;
import com.jt.dubbo.pojo.User;
@Service(timeout=3000)	//3秒超时 内部实现了rpc
//@org.springframework.stereotype.Service//将对象交给spring容器管理
public class UserServiceImpl implements UserService {
   
	
	@Autowired
	private UserMapper userMapper;
	
	@Override
	public List<User> findAll() {
   
		System.out.println("我是第一个服务的提供者");
		return userMapper.selectList(null);
	}
	
	@Override
	public void saveUser(User user) {
   
		userMapper.insert(user);
	}
}
3.2.3、编辑提供者配置文件
server:
  port: 9000   #定义端口

spring:
  datasource:
    #引入druid数据源
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/jtdb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
    username: root
    password: root

#关于Dubbo配置   
dubbo:
  scan:
    basePackages: com.jt    #指定dubbo的包路径 扫描dubbo注解
  application:              #应用名称
    name: provider-user     #一个接口对应一个服务名称   一个接口可以有多个实现
  registry:  #注册中心 用户获取数据从机中获取 主机只负责监控整个集群 实现数据同步
    address: zookeeper://192.168.126.129:2181?backup=192.168.126.129:2182,192.168.126.129:2183
  protocol:  #指定协议
    name: dubbo  #使用dubbo协议(tcp-ip)  web-controller直接调用sso-Service
    port: 20880  #每一个服务都有自己特定的端口 不能重复.
     
mybatis-plus:
  type-aliases-package: com.jt.dubbo.pojo       #配置别名包路径
  mapper-locations: classpath:/mybatis/mappers/*.xml  #添加mapper映射文件
  configuration:
    map-underscore-to-camel-case: true                #开启驼峰映射规则

3.3、服务消费者介绍

3.3.1、编辑Controller
package com.jt.dubbo.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.alibaba.dubbo.config.annotation.Reference;
import com.jt.dubbo.pojo.User;
import com.jt.dubbo.service.UserService;

@RestController
public class UserController {
   
	
	//利用dubbo的方式为接口创建代理对象 利用rpc调用
	@Reference
	private UserService userService; 
	
	/**
	 * Dubbo框架调用特点:远程RPC调用就像调用自己本地服务一样简单
	 * @return
	 */
	@RequestMapping("/findAll")
	public List<User> findAll(){
   	
		//远程调用时传递的对象数据必须序列化.
		return userService.findAll();
	}
	
	@RequestMapping("/saveUser/{name}/{age}/{sex}")
	public String saveUser(User user) {
   		
		userService.saveUser(user);
		return "用户入库成功!!!";
	}
}
3.3.2、编辑YML配置文件
server:
  port: 9001
dubbo:
  scan:
    basePackages: com.jt
  application:
    name: consumer-user   #定义消费者名称
  registry:               #注册中心地址
    address: zookeeper://192.168.126.129:2181?backup=192.168.126.129:2182,192.168.126.129:2183
3.3.3、Dubbo入门案例测试

在这里插入图片描述

4、关于Dubbo框架知识点

4.1、问题1:如果其中一个服务器宕机 用户访问是否受限?

答:由于zk的帮助,使得程序永远可以访问正确的服务器.并且当服务重启时,duboo有服务的自动发现功能,消费者不需要重启即可以访问新的服务.

4.2、问题2:如果ZK集群短时间宕机,用户访问是否受限?

答: 用户的访问不受影响,由于消费者在本地存储服务列表信息,当访问故障机时,自动的将标识信息改为down属性.

5、Dubbo负载均衡策略

5.1、负载均衡种类

1、客户端负载均衡
Dubbo/SpringCloud等微服务框架
在这里插入图片描述
在这里插入图片描述
2.服务端负载均衡
说明:客户端发起请求之后,必须由统一的服务器进行负载均衡,所有的压力都在服务器中.
NGINX
在这里插入图片描述

5.2、Dubbo负载均衡方式

@RestController
public class UserController {
   
	
	//利用dubbo的方式为接口创建代理对象 利用rpc调用
	//@Reference(loadbalance = "random")			//默认策略  负载均衡随机策略
	//@Reference(loadbalance = "roundrobin")		//轮询方式
	//@Reference(loadbalance = "consistenthash")	//一致性hash  消费者绑定服务器提供者
	@Reference(loadbalance = "leastactive")			//挑选当前负载小的服务器进行访问
	private UserService userService; 
}

二、京淘项目Dubbo改造

1、改造JT-SSO

1.1、添加jar包文件

<!--引入dubbo配置 -->
<dependency>
     <groupId>com.alibaba.boot</groupId>
     <artifactId>dubbo-spring-boot-starter</artifactId>
      <version>0.2.0</version>
</dependency>

1.2、创建DubboUserService接口

在这里插入图片描述

1.3、创建提供者实现类

在这里插入图片描述

1.4、编辑提供者YML配置文件

server:
  port: 8093
  servlet:
    context-path: /
spring:
  datasource:
    #引入druid数据源
    #type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/jtdb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
    username: root
    password: root

  mvc:
    view:
      prefix: /WEB-INF/views/
      suffix: .jsp
#mybatis-plush配置
mybatis-plus:
  type-aliases-package: com.jt.pojo
  mapper-locations: classpath:/mybatis/mappers/*.xml
  configuration:
    map-underscore-to-camel-case: true

logging:
  level: 
    com.jt.mapper: debug

#关于Dubbo配置
dubbo:
  scan:
    basePackages: com.jt    #指定dubbo的包路径 扫描dubbo注解
  application:              #应用名称
    name: provider-user     #一个接口对应一个服务名称   一个接口可以有多个实现
  registry:  #注册中心 用户获取数据从机中获取 主机只负责监控整个集群 实现数据同步
    address: zookeeper://192.168.126.129:2181?backup=192.168.126.129:2182,192.168.126.129:2183
  protocol:  #指定协议
    name: dubbo  #使用dubbo协议(tcp-ip)  web-controller直接调用sso-Service
    port: 20880  #每一个服务都有自己特定的端口 不能重复.

1.5、启动服务提供者

测试Dubbo服务器启动是否正常.
在这里插入图片描述

2、改造服务消费者JT-WEB

2.1、注入Service接口

在这里插入图片描述

2.2、编辑消费者配置文件

server:
  port: 8092    
spring:     #定义springmvc视图解析器
  mvc:
    view:
      prefix: /WEB-INF/views/
      suffix: .jsp

dubbo:
  scan:
    basePackages: com.jt
  application:
    name: consumer-web   #定义消费者名称
  registry:               #注册中心地址
    address: zookeeper://192.168.126.129:2181?backup=192.168.126.129:2182,192.168.126.129:2183

2.3、启动效果测试

在这里插入图片描述

三、用户模块实现

1、用戶注册

1.1、URL分析

根据url地址说明请求为同域请求.
在这里插入图片描述
参数信息:
在这里插入图片描述

1.2、页面JS分析

说明:根据分析获取返回值数据信息应该为SysResult对象
在这里插入图片描述

1.3、编辑UserController

 /**
     * 需求: 实现用户信息注册
     * 1.url请求地址:  http://www.jt.com/user/doRegister
     * 2.请求参数:     {password:_password,username:_username,phone:_phone},
     * 3.返回值结果:   SysResult对象
     */
    @RequestMapping("/doRegister")
    @ResponseBody   //将数据转化为JSON
    public SysResult saveUser(User user){
   
        //消费者给予dubbo协议将user对象进行远程网络数据传输.
        userService.saveUser(user);
        return SysResult.success();
    }

1.4、编辑UserService

/**
     * 注意事项:
     *  1.暂时使用电话号码代替邮箱
     *  2.密码进行md5加密.
     *  3.入库操作注意事务控制
     * @param user
     */
    @Override
    public void saveUser(User user) {
   
        String md5Pass =
                DigestUtils.md5DigestAsHex(user.getPassword().getBytes());
        user.setEmail(user.getPhone())
            .setPassword(md5Pass)
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值