商城项目(2.0版本) day02

一、 项目架构的简介

在这里插入图片描述

通过上述的图,以maven 为基础,我们将 工程分为多个模块
1、 gmall-parent
2、 gmall-api
3、 gmall-common-util
4、 gmall-web-util
5、 gmall-service-util
6、 gmall-user-web
7、 gmall-manage-web
8、 gmall-user-service

1.1 、 gmall-parent 工程 的创建

作用:用来统一整个项目的jar 包的统一管理,一般没有代码

步骤:

  1. 用 maven 创建一个gmall-parent 的工程
  2. 新建其他项目模块(子项目)的时候,继承自gmall-parent
  3. gmall-parent 中父依赖使用springboot 1.5

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.atguigu.gmall</groupId>
    <artifactId>gmall-parent</artifactId>
    <version>1.0-SNAPSHOT</version>

    <!-- 打包的方式为 pom -->
    <packaging>pom</packaging>

    <properties>

        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>

        <!-- dubbo -->
        <dubbo-starter.version>1.0.10</dubbo-starter.version>
        <dubbo.version>2.6.0</dubbo.version>
        <zkclient.version>0.10</zkclient.version>


        <!-- 相当于 springboot 的jsp -->
        <nekohtml.version>1.9.20</nekohtml.version>
        <xml-apis.version>1.4.01</xml-apis.version>
        <batik-ext.version>1.9.1</batik-ext.version>

        <!-- 页面的解析。 -->
        <jsoup.version>1.11.2</jsoup.version>
        <httpclient.version>4.5.5</httpclient.version>

        <!-- db -->
        <mybatis.version>1.3.1</mybatis.version>
        <mapper-starter.version>1.2.3</mapper-starter.version>
        <jedis.version>2.9.0</jedis.version>

        <!-- 通用的工具包 -->
        <fastjson.version>1.2.46</fastjson.version>
        <commons-lang3.version>3.7</commons-lang3.version>
        <jest.version>5.3.3</jest.version>
        <jna.version>4.5.1</jna.version>
        <beanUtils.version>1.9.3</beanUtils.version>

    </properties>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.10.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>${fastjson.version}</version>
            </dependency>

            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>dubbo</artifactId>
                <version>${dubbo.version}</version>
            </dependency>

            <dependency>
                <groupId>com.101tec</groupId>
                <artifactId>zkclient</artifactId>
                <version>${zkclient.version}</version>
            </dependency>

            <dependency>
                <groupId>com.gitee.reger</groupId>
                <artifactId>spring-boot-starter-dubbo</artifactId>

                <version>${dubbo-starter.version}</version>
            </dependency>

            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>${mybatis.version}</version>
            </dependency>

            <dependency>
                <groupId>net.sourceforge.nekohtml</groupId>
                <artifactId>nekohtml</artifactId>
                <version>${nekohtml.version}</version>
            </dependency>
            
            <dependency>
                <groupId>xml-apis</groupId>
                <artifactId>xml-apis</artifactId>
                <version>${xml-apis.version}</version>
            </dependency>

            <dependency>
                <groupId>org.apache.xmlgraphics</groupId>
                <artifactId>batik-ext</artifactId>
                <version>${batik-ext.version}</version>
            </dependency>

            <!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
            <dependency>
                <groupId>org.jsoup</groupId>
                <artifactId>jsoup</artifactId>
                <version>${jsoup.version}</version>
            </dependency>

            <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpclient</artifactId>
                <version>${httpclient.version}</version>
            </dependency>

            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>${commons-lang3.version}</version>
            </dependency>

            <dependency>
                <groupId>tk.mybatis</groupId>
                <artifactId>mapper-spring-boot-starter</artifactId>
                <exclusions>
                    <exclusion>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-starter-jdbc</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <dependency>
                <groupId>redis.clients</groupId>
                <artifactId>jedis</artifactId>
                <version>${jedis.version}</version>
            </dependency>

            <!-- https://mvnrepository.com/artifact/io.searchbox/jest -->
            <dependency>
                <groupId>io.searchbox</groupId>
                <artifactId>jest</artifactId>
                <version>${jest.version}</version>
            </dependency>

            <!-- https://mvnrepository.com/artifact/net.java.dev.jna/jna -->
            <dependency>
                <groupId>net.java.dev.jna</groupId>
                <artifactId>jna</artifactId>
                <version>${jna.version}</version>
            </dependency>
            <dependency>
                <groupId>commons-beanutils</groupId>
                <artifactId>commons-beanutils</artifactId>
                <version>${beanUtils.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

</project>

1.2、gamll-api 工程

  1. 首先用maven 创建一个gmail-api的工程
  2. 引入tk 通用的mapper(映射类)
  3. 将XXXService 接口和所有bean类 都放到api中
  4. service、service实现、controller、mapper、mapper.xml 中所有的bean的引入全部修改引入路径

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.atguigu.gmall</groupId>
    <artifactId>gmall-api</artifactId>
    <version>1.0.1</version>

    <parent>
        <groupId>com.atguigu.gmall</groupId>
        <artifactId>gmall-parent</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <dependencies>
        <!-- 通用mapper -->
        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper-spring-boot-starter</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-jdbc</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>

    </dependencies>

</project>

bean

package com.atguigu.gmail.bean;



import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import java.io.Serializable;
import java.util.Date;

public class UmsMember implements Serializable {
    
    

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private String id;
    private String memberLevelId;
    private String username;
    private String password;
    private String nickname;
    private String phone;
    private int status;
    private Date createTime;
    private String icon;
    private int gender;
    private Date birthday;
    private String city;
    private String job;
    private String personalizedSignature;
    private int sourceType;
    private int integration;
    private int growth;
    private int luckeyCount;
    private int historyIntegration;

    public String getId() {
    
    
        return id;
    }

    public void setId(String id) {
    
    
        this.id = id;
    }

    public String getMemberLevelId() {
    
    
        return memberLevelId;
    }

    public void setMemberLevelId(String memberLevelId) {
    
    
        this.memberLevelId = memberLevelId;
    }

    public String getUsername() {
    
    
        return username;
    }

    public void setUsername(String username) {
    
    
        this.username = username;
    }

    public String getPassword() {
    
    
        return password;
    }

    public void setPassword(String password) {
    
    
        this.password = password;
    }

    public String getNickname() {
    
    
        return nickname;
    }

    public void setNickname(String nickname) {
    
    
        this.nickname = nickname;
    }

    public String getPhone() {
    
    
        return phone;
    }

    public void setPhone(String phone) {
    
    
        this.phone = phone;
    }

    public int getStatus() {
    
    
        return status;
    }

    public void setStatus(int status) {
    
    
        this.status = status;
    }

    public Date getCreateTime() {
    
    
        return createTime;
    }

    public void setCreateTime(Date createTime) {
    
    
        this.createTime = createTime;
    }

    public String getIcon() {
    
    
        return icon;
    }

    public void setIcon(String icon) {
    
    
        this.icon = icon;
    }

    public int getGender() {
    
    
        return gender;
    }

    public void setGender(int gender) {
    
    
        this.gender = gender;
    }

    public Date getBirthday() {
    
    
        return birthday;
    }

    public void setBirthday(Date birthday) {
    
    
        this.birthday = birthday;
    }

    public String getCity() {
    
    
        return city;
    }

    public void setCity(String city) {
    
    
        this.city = city;
    }

    public String getJob() {
    
    
        return job;
    }

    public void setJob(String job) {
    
    
        this.job = job;
    }

    public String getPersonalizedSignature() {
    
    
        return personalizedSignature;
    }

    public void setPersonalizedSignature(String personalizedSignature) {
    
    
        this.personalizedSignature = personalizedSignature;
    }

    public int getSourceType() {
    
    
        return sourceType;
    }

    public void setSourceType(int sourceType) {
    
    
        this.sourceType = sourceType;
    }

    public int getIntegration() {
    
    
        return integration;
    }

    public void setIntegration(int integration) {
    
    
        this.integration = integration;
    }

    public int getGrowth() {
    
    
        return growth;
    }

    public void setGrowth(int growth) {
    
    
        this.growth = growth;
    }

    public int getLuckeyCount() {
    
    
        return luckeyCount;
    }

    public void setLuckeyCount(int luckeyCount) {
    
    
        this.luckeyCount = luckeyCount;
    }

    public int getHistoryIntegration() {
    
    
        return historyIntegration;
    }

    public void setHistoryIntegration(int historyIntegration) {
    
    
        this.historyIntegration = historyIntegration;
    }
}


package com.atguigu.gmail.bean;



import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import java.io.Serializable;

public class UmsMemberReceiveAddress implements Serializable {
    
    

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private String id;
    private String memberId;
    private String  name;
    private String  phoneNumber;
    private int defaultStatus;
    private String postCode;
    private String province;
    private String city;
    private String region;
    private String detailAddress;

    public String getId() {
    
    
        return id;
    }

    public void setId(String id) {
    
    
        this.id = id;
    }

    public String getMemberId() {
    
    
        return memberId;
    }

    public void setMemberId(String memberId) {
    
    
        this.memberId = memberId;
    }

    public String getName() {
    
    
        return name;
    }

    public void setName(String name) {
    
    
        this.name = name;
    }

    public String getPhoneNumber() {
    
    
        return phoneNumber;
    }

    public void setPhoneNumber(String phoneNumber) {
    
    
        this.phoneNumber = phoneNumber;
    }

    public int getDefaultStatus() {
    
    
        return defaultStatus;
    }

    public void setDefaultStatus(int defaultStatus) {
    
    
        this.defaultStatus = defaultStatus;
    }

    public String getPostCode() {
    
    
        return postCode;
    }

    public void setPostCode(String postCode) {
    
    
        this.postCode = postCode;
    }

    public String getProvince() {
    
    
        return province;
    }

    public void setProvince(String province) {
    
    
        this.province = province;
    }

    public String getCity() {
    
    
        return city;
    }

    public void setCity(String city) {
    
    
        this.city = city;
    }

    public String getRegion() {
    
    
        return region;
    }

    public void setRegion(String region) {
    
    
        this.region = region;
    }

    public String getDetailAddress() {
    
    
        return detailAddress;
    }

    public void setDetailAddress(String detailAddress) {
    
    
        this.detailAddress = detailAddress;
    }
}


mapper

package com.atguigu.gmail.mapper;

import com.atguigu.gmail.bean.UmsMember;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;

@Mapper
public interface UserMapper {
    
    

    @Select("select * from ums_member")
    List<UmsMember> getAllUsers();
}


package com.atguigu.gmail.mapper;

import com.atguigu.gmail.bean.UmsMemberReceiveAddress;
import tk.mybatis.mapper.common.Mapper;


@org.apache.ibatis.annotations.Mapper
public interface UmsMemberReceiveAddressMapper extends Mapper<UmsMemberReceiveAddress> {
    
    
}


servie

package com.atguigu.gmail.service;

import com.atguigu.gmail.bean.UmsMemberReceiveAddress;

import java.util.List;

public interface UmsMemberReceiveAddressService {
    
    
    List<UmsMemberReceiveAddress> getAddressByUid(Long uid);
}

package com.atguigu.gmail.service;

import com.atguigu.gmail.bean.UmsMember;

import java.util.List;

public interface UserService {
    
    
    List<UmsMember> getAllUsers();
}

1.3、utils 介绍

三个 Util 的介绍

  1. 项目中的通用框架,是所有应用工程需要引入的包
    例如:springboot、common-lang3、common-beanutils

  2. 基于soa的架构理念,项目分为web前端controller(webUtil)
    Jsp、thymeleaf、cookie 工具类

  3. 基于soa 的架构理念,项目分为web后端 service (serviceUtil)
    Mybatis 、 mysql 、 reids

  4. commonUtil 在 上述前后端 都 引入的工具类 都加入

前后端模块的介绍

  1. 新建一个web的前端controller 模块的项目
    Controller = parent + api + webUtil
  2. 新建一个web的后端controller 模块的项目
    Service= parent + api +ServiceUtil
1.3.1、common-util 工程构建

在这里插入图片描述
pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.atguigu.gmall</groupId>
    <artifactId>gmall-common-util</artifactId>
    <version>1.0-SNAPSHOT</version>

    <parent>
        <groupId>com.atguigu.gmall</groupId>
        <artifactId>gmall-parent</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>


    <dependencies>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
        </dependency>


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>



        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
        </dependency>

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
        </dependency>

        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
        </dependency>

        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
        </dependency>


        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
        </dependency>

        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>com.gitee.reger</groupId>
            <artifactId>spring-boot-starter-dubbo</artifactId>
        </dependency>

    </dependencies>

</project>

1.3.2、service - utils

在这里插入图片描述

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.atguigu.gmall</groupId>
    <artifactId>gmall-service-util</artifactId>
    <version>1.0-SNAPSHOT</version>


    <parent>
        <groupId>com.atguigu.gmall</groupId>
        <artifactId>gmall-parent</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <dependencies>

        <dependency>
            <groupId>com.atguigu.gmall</groupId>
            <artifactId>gmall-common-util</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
        </dependency>

    </dependencies>

</project>

1.3.3、web- utils

在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.atguigu.gmall</groupId>
    <artifactId>gmall-web-util</artifactId>
    <version>1.0-SNAPSHOT</version>

    <parent>
        <groupId>com.atguigu.gmall</groupId>
        <artifactId>gmall-parent</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <dependencies>

       <dependency>
           <groupId>com.atguigu.gmall</groupId>
           <artifactId>gmall-common-util</artifactId>
           <version>1.0-SNAPSHOT</version>
       </dependency>
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-thymeleaf</artifactId>
       </dependency>

   </dependencies>

</project>

1.4 gmall-user 的改造

配置

### 服务端口
server.port=9999

## jdbc
spring.datasource.url=jdbc:mysql://localhost:3306/gmail?serverTimezone=Asia/Shanghai&useSSL=false&zeroDateTimeBehavior=convertToNull&useLegacyDatetimeCode=false
spring.datasource.username=root
spring.datasource.password=root


### mybatis
mybatis.mapper-locations=classpath:mapper/*Mapper.xml
mybatis.configuration.map-underscore-to-camel-case=true



controller

package com.atguigu.gmail.controller;


import com.atguigu.gmail.bean.UmsMemberReceiveAddress;
import com.atguigu.gmail.service.UmsMemberReceiveAddressService;
import com.atguigu.gmail.service.impl.UserServiceImpl;
import com.atguigu.gmail.bean.UmsMember;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

@Controller
public class UserController {

    @Autowired
    UserServiceImpl userService;

    @Autowired
    UmsMemberReceiveAddressService umsMemberReceiveAddressService;


    @RequestMapping("getAllUsers")
    @ResponseBody
    public List<UmsMember> getAllUsers(){

        List<UmsMember> UmsMembers = userService.getAllUsers();
        return UmsMembers;
    }


    @RequestMapping("getAddressByUid")
    @ResponseBody
    public List<UmsMemberReceiveAddress> getAddressByUid(Long uid){

        List<UmsMemberReceiveAddress> umsMemberReceiveAddresses = umsMemberReceiveAddressService.getAddressByUid(uid);
        return umsMemberReceiveAddresses;
    }


}


service.impl


package com.atguigu.gmail.service.impl;

import com.atguigu.gmail.mapper.UmsMemberReceiveAddressMapper;
import com.atguigu.gmail.bean.UmsMemberReceiveAddress;
import com.atguigu.gmail.service.UmsMemberReceiveAddressService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UmsMemberReceiveAddressServiceImpl implements UmsMemberReceiveAddressService {
    
    

    @Autowired
    UmsMemberReceiveAddressMapper umsMemberReceiveAddressMapper;

    @Override
    public List<UmsMemberReceiveAddress> getAddressByUid(Long uid) {
    
    

        UmsMemberReceiveAddress umsMemberReceiveAddress = new UmsMemberReceiveAddress();
        umsMemberReceiveAddress.setMemberId(uid +"");

        return umsMemberReceiveAddressMapper.select(umsMemberReceiveAddress);


    }
}

package com.atguigu.gmail.service.impl;

import com.atguigu.gmail.bean.UmsMember;
import com.atguigu.gmail.mapper.UserMapper;
import com.atguigu.gmail.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserServiceImpl implements UserService {
    
    

    @Autowired
    UserMapper userMapper;

    @Override
    public List<UmsMember> getAllUsers() {
    
    

        return  userMapper.getAllUsers();

    }
}


package com.atguigu.gmail;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class GmailUserApplication {
    
    

    public static void main(String[] args) {
    
    
        SpringApplication.run(GmailUserApplication.class, args);
    }

}


二、服务整合Dubbo

2.1 Dubbo和zookeeper

在这里插入图片描述

Dubbo和springcloud的区别:
Dubbo出生于阿里系,是阿里巴巴服务化治理的核心框架,并被广泛应用于中国各互联网公司;只需要通过spring配置的方式即可完成服务化,对于应用无入侵。但框架本身的成熟度以及文档的完善程度,完全能满足各大互联网公司的业务需求。如果我们需要使用配置中心、分布式跟踪这些内容都需要自己去集成,这样无形中增加了使用 Dubbo 的难度。

Spring Cloud 是大名鼎鼎的 Spring 家族的产品, 专注于企业级开源框架的研发。 Spring Cloud 自从发展到现在,仍然在不断的高速发展,几乎考虑了服务治理的方方面面,开发起来非常的便利和简单。

Spring Cloud更新的非常快,企业需要根据自身的研发水平和所处阶段选择合适的架构来解决业务问题,不管是Dubbo还是Spring Cloud都是实现微服务有效的工具。

1.dubbo 的 soa 工作原理,和springcloud 类似
2. dubbo 和 springcloud 的区别在与dubbo 有自己的dubbo 协议通讯,sc 是由http 协议(rest风格)
3.dubbo 有一个注册中心的客户端在 实时同步注册中心的服务信息
4. dubbo 有一个javaweb 的监控中心 ,负责监控服务的注册信息,甚至可以配置负载均衡

在这里插入图片描述

那dubbo和zookeeper如何引入?
dubbo其实是一组jar包,通过maven引入就可以。
zookeeper是一个开源的服务软件,需要安装到linux中,win 也可以。

Dubbo和zookeeper 的安装和教学 可以学习

2.2 Zookeeper 在linux 设置开机自启

环境
linux版本: CentOS 6.8
zookeeper版本 zookeeper-3.4.11.tar.gz

步骤:

  1. 进入 如下命令 vim /etc/init.d/zookeeper
    在这里插入图片描述

把如下脚本复制进去

#!/bin/bash
#chkconfig:2345 20 90
#description:zookeeper
#processname:zookeeper
ZK_PATH=/opt/zookeeper
export JAVA_HOME=/opt/jdk1.8.0_152
case $1 in
         start) sh  $ZK_PATH/bin/zkServer.sh start;;
         stop)  sh  $ZK_PATH/bin/zkServer.sh stop;;
         status) sh  $ZK_PATH/bin/zkServer.sh status;;
         restart) sh $ZK_PATH/bin/zkServer.sh restart;;
         *)  echo "require start|stop|status|restart"  ;;
esac

然后把脚本注册为Service

在这里插入图片描述
增加权限

在这里插入图片描述

然后咱们启动zookeeper
在这里插入图片描述
以上状态即为安装成功。

2.3 Tomcat在linux 设置开机自启

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

2.4、dubbo框架的整合

2.4.1、dubbo-admin 的管理后台

启动

git 上下载
在这里插入图片描述
解压,进入 dubbo-admin-master\dubbo-admin\src\main\resources 目录。这里可以修改配置,
注意:需要一个zookeeper

在这里插入图片描述

打开 Power-Shell ,执行 mvn package 命令,将文件打包

在这里插入图片描述
打包成功 ,进入target 目录,启动jar
在这里插入图片描述

根据 访问的springboot 启动的端口

访问项目
在这里插入图片描述

成功登入。

在这里插入图片描述

2.4.2 将项目改造为dubbo 的分布式架构

将 user项目 拆分为 user-service 和 user-web
引入dubbo 框架
将dubbo框架引入到 common-util 中(因为web 层 和servie 层 将来都需要使用dubbo 进行通讯)

在这里插入图片描述

user-service 的配置

# 服务端口
server.port=8070


# jdbc
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.url=jdbc:mysql://localhost:3306/gmail?serverTimezone=Asia/Shanghai&useSSL=false&zeroDateTimeBehavior=convertToNull&useLegacyDatetimeCode=false

# mybtais配置
mybatis.mapper-locations=classpath:mapper/*Mapper.xml
mybatis.configuration.map-underscore-to-camel-case=true


# 日志的级别
logging.level.root=info

# dubbo 的配置
## dubbo 中的服务名称
spring.dubbo.application=user-service
## dubbo 的通讯协议名称
spring.dubbo.protocol.name=dubbo
## zookeeper 的 注册中心的 地址
spring.dubbo.registry=127.0.0.1:2181
## zookeeper 的通讯协议的名称
spring.dubbo.registry.protocol=zookeeper
## dubbo 的服务的扫描路径
spring.dubbo.base-package=com.atguigu.gmall


user-web 的配置

# 服务端口
server.port=8080


# 日志的级别
logging.level.root=debug

# dubbo 的配置
## dubbo 中的服务名称
spring.dubbo.application=user-web
## dubbo 的通讯协议名称
spring.dubbo.protocol.name=dubbo
## zookeeper 的 注册中心的 地址
spring.dubbo.registry=127.0.0.1:2181
## zookeeper 的通讯协议的名称
spring.dubbo.registry.protocol=zookeeper
## dubbo 的服务的扫描路径
spring.dubbo.base-package=com.atguigu.gmall
## 设置超时时间
spring.dubbo.consumer.timeout=60000
## 设置 是否检查服务存在
spring.dubbo.consumer.check=false

dubbo配置的注意事项
1、spring 的 service 改为dubbo 的service
2、上述 service 的引用 将autowired 改为 refence
3、 dubbo 的consumer 在进行 dubbo 协议通讯时,需要实现序列化接口(封装的数据对象)
4、dubbo 的consumer 在三秒钟直降每间隔 一秒 进行一次重新访问,默认一秒钟超时,三次访问之后会直接抛超时异常,
所以我们在开发阶段,可以将consumer 设置的超时使劲延长,放标断电调试、

代码如下:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_42082278/article/details/113804217