Dubbo

1 Dubbo框架通讯的方式

说明:只要使用Dubbo框架 ,在内部使用了dubbo协议进行通讯,其中的IP地址是动态生成的.并且端口号是访问服务的唯一标识信息.
在这里插入图片描述

2 ZK存储数据的结构

说明:zk中的数据的存储的方式是树形结构的.一般三级.
在这里插入图片描述

3 关于负载均衡的说明

3.1 集中式的负载均衡

说明:由于nginx处于负载均衡的中心,所以什么样的服务都会经过nginx之后转向到不同的服务器中. 所以会造成nginx的负载压力很大.
nginx的主要的作用是反向代理.
在这里插入图片描述

3.2 客户端的负载均衡

说明:在微服务调用过程中每个服务的消费者都可以在客户端实现负载均衡的操作,在每次请求之前通过服务列表获取将要访问的服务信息.实现了压力私有化.
在这里插入图片描述

3.3 Dubbo负载均衡的方式

名称都是类名的前半部分都小写即可.
1.RandomLoadBalance 随机负载均衡 语法: random 默认的
2.RoundRobinLoadBalance 轮询策略 语法: roundrobin
3.ConsistentHashLoadBalance 一致性hash算法 将消费者与服务提供者绑定 语法: consistenthash
4.LeastActiveLoadBalance 挑选负载压力小的服务器进行访问 语法: leastactive
在这里插入图片描述

项目Dubbo改造

1 改造计划

1.jt-common充当接口项目
2.jt-sso 充当用户的提供者 服务端口号20880 服务名称 provider-sso 接口DubboUserService
3.jt-web 充当用户的消费者

2 导入Dobbu jar包

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

3 编辑Dubbo接口

说明:在jt-common中添加Dubbo的业务接口
在这里插入图片描述

4 编辑jt-sso的服务提供者

4.1 编辑Service实现类

在这里插入图片描述

4.2 编辑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的支持
  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的包路径
  application:              #应用名称
    name: provider-sso     #一个接口对应一个服务名称
  registry:                 #zk集群 主机中的信息与从机中的信息一致的 从zk中获取数据的时候链接的从机 主机的作用就是监控集群
    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  #每一个服务都有自己特定的端口 不能重复.

5 编辑服务消费者

5.1 编辑UserController

注入UserService注解
在这里插入图片描述

5.2 编辑YML配置文件

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

  

用户模块实现

1 用户注册

1.1 页面分析

在这里插入图片描述
在这里插入图片描述

1.2 页面JS分析

说明:根据页面url地址 查找页面JS的位置
在这里插入图片描述

1.3 编辑UserController

   /**
     * 完成用户注册操作.
     * url地址: http://www.jt.com/user/doRegister
     * 参数:    {password:_password,username:_username,phone:_phone}
     * 返回值:  SysResult对象   返回的是JSON串
     * 业务说明:通过dubbo框架将user信息RPC传入jt-sso实现数据的入库操作.
     * */
    @RequestMapping("/doRegister")
    @ResponseBody
    public SysResult saveUser(User user){

        dubboUserService.saveUser(user);
        return SysResult.success();
    }

1.4 编辑UserService

package com.jt.service;

import com.alibaba.dubbo.config.annotation.Service;
import com.jt.mapper.UserMapper;
import com.jt.pojo.User;
import com.jt.vo.SysResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.DigestUtils;

@Service    //dubbo的注解
public class DubboUserServiceImpl implements DubboUserService{

    @Autowired
    private UserMapper userMapper;

    /**
     * 1.邮箱暂时使用电话号码代替
     * 2.需要将密码进行加密处理    md5/md5-hash
     * @param user
     * @return
     */
    @Override
    @Transactional
    public void saveUser(User user) {
        //1.获取明文
        String password = user.getPassword();
        //2.利用Spring的工具API进行加密操作
        password = DigestUtils.md5DigestAsHex(password.getBytes());
        user.setPassword(password).setEmail(user.getPhone());
        userMapper.insert(user);
    }
}


1.4 关于POJO转化异常说明

报错说明: 由于SpringBoot配置了热部署的工具,当代码进行修改之后,程序就会重新启动. 在重启的过程中程序又会再次链接zookeeper注册中心.由于zk的心跳检测机制存在超时时间,可能在zk中会出现2条一模一样的服务的提供者的信息.
解决方案: 需要手动的重启服务器即可.
在这里插入图片描述

©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页