<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          SpringCloud微服務(wù)框架

          共 26855字,需瀏覽 54分鐘

           ·

          2021-04-03 20:58

          微服務(wù)SpringCloud架構(gòu)簡(jiǎn)介

          微服務(wù)化的核心就是將傳統(tǒng)的一站式應(yīng)用,根據(jù)業(yè)務(wù)拆分成一個(gè)一個(gè)的服務(wù),徹底地去耦合,每個(gè)微服務(wù)提供單個(gè)的業(yè)務(wù)功能的服務(wù),一個(gè)服務(wù)做一件事情,從技術(shù)角度去看就是一種小而獨(dú)立的處理過(guò)程,類似進(jìn)程的概念,能夠自行單獨(dú)啟動(dòng)或者銷毀,擁有自己獨(dú)立的數(shù)據(jù)庫(kù)。

          微服務(wù)與微服務(wù)架構(gòu)的理解

          微服務(wù)是服務(wù)的大小,它關(guān)注的是某一個(gè)點(diǎn),是具體解決某一個(gè)問(wèn)題、提供落地對(duì)應(yīng)服務(wù)的一個(gè)服務(wù)應(yīng)用

          微服務(wù)優(yōu)點(diǎn) 每個(gè)服務(wù)足夠內(nèi)聚,足夠小,代碼容易理解這樣能夠聚焦一個(gè)指定的業(yè)務(wù)功能或者業(yè)務(wù)需求開(kāi)發(fā)簡(jiǎn)單,開(kāi)發(fā)效率提供,一個(gè)服務(wù)可能就是專一的干一件事情。缺點(diǎn) 開(kāi)發(fā)人員要處理分布式的服務(wù)雜性 運(yùn)維難度大 部署依賴 通信成本大

          架構(gòu)的相關(guān)組件

          服務(wù)注冊(cè)與發(fā)現(xiàn)----配置中心管理

          服務(wù)調(diào)用----服務(wù)網(wǎng)關(guān)

          服務(wù)熔斷----服務(wù)監(jiān)控

          負(fù)載均衡----全鏈路監(jiān)控

          服務(wù)降級(jí)----自動(dòng)化部署監(jiān)控

          服務(wù)消息隊(duì)列----服務(wù)定時(shí)任務(wù)操作

          微服務(wù)技術(shù)棧 服務(wù)開(kāi)發(fā) 服務(wù)配置與管理 服務(wù)注冊(cè)與發(fā)現(xiàn) 服務(wù)調(diào)用 服務(wù)熔斷器 負(fù)載均衡 服務(wù)接口調(diào)用 消息隊(duì)列 服務(wù)配置中心管理 服務(wù)路由 API網(wǎng)關(guān) 服務(wù)監(jiān)控

          Dubbo與SpringCloud對(duì)比 SpringCloud擁有完整的微服務(wù)架構(gòu),支持Rest  Riibon支持多種可插的序列化選擇,不是RPC,支持多種語(yǔ)言,Eureka是服務(wù)注冊(cè),是負(fù)載均衡Ribbon+客戶端Zull  Zull+服務(wù)動(dòng)態(tài)代理,配置服務(wù)config,是服務(wù)調(diào)用鏈監(jiān)控Zull,是高可用,容錯(cuò)Hystrix+客戶端Ribbon Dubbo擁有微服務(wù),不支持RESTFul,是RPC,不支持多種語(yǔ)言,是服務(wù)注冊(cè),是客戶端負(fù)載均衡,不是配置服務(wù)config 不是服務(wù)調(diào)用鏈監(jiān)控Zull,否

          SpringCloud微服務(wù)概述 SpringClou是基于SpringBoot提供了一整套的微服務(wù),技術(shù)棧有服務(wù)注冊(cè)與發(fā)現(xiàn),服務(wù)配置中心,全鏈路監(jiān)控,服務(wù)網(wǎng)關(guān),負(fù)載均衡,熔斷器等組件 SpringCloud為開(kāi)發(fā)人員提供了一整套的分布式系統(tǒng),包括配置管理,服務(wù)發(fā)現(xiàn),斷路器,路喲,微代理,事件總線,全局索,決策競(jìng)選,分布式會(huì)話等

          SpringClou與SpringBoot比較

          Springcloud官方地址

          創(chuàng)建microservicecloud父工程所依賴的架包

           <packaging>pom</packaging>


              <properties>
                  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
                  <maven.compiler.source>1.8</maven.compiler.source>
                  <maven.compiler.target>1.8</maven.compiler.target>
                  <junit.version>4.12</junit.version>
                  <log4j.version>1.2.17</log4j.version>
                  <lombok.version>1.16.18</lombok.version>
              </properties>

              <dependencyManagement>
                  <dependencies>
                      <dependency>
                          <groupId>org.springframework.cloud</groupId>
                          <artifactId>spring-cloud-dependencies</artifactId>
                          <version>Dalston.SR1</version>
                          <type>pom</type>
                          <scope>import</scope>
                      </dependency>
                      <dependency>
                          <groupId>org.springframework.boot</groupId>
                          <artifactId>spring-boot-dependencies</artifactId>
                          <version>1.5.9.RELEASE</version>
                          <type>pom</type>
                          <scope>import</scope>
                      </dependency>
                      <dependency>
                          <groupId>mysql</groupId>
                          <artifactId>mysql-connector-java</artifactId>
                          <version>5.0.4</version>
                      </dependency>
                      <dependency>
                          <groupId>com.alibaba</groupId>
                          <artifactId>druid</artifactId>
                          <version>1.0.31</version>
                      </dependency>
                      <dependency>
                          <groupId>org.mybatis.spring.boot</groupId>
                          <artifactId>mybatis-spring-boot-starter</artifactId>
                          <version>1.3.0</version>
                      </dependency>
                      <dependency>
                          <groupId>ch.qos.logback</groupId>
                          <artifactId>logback-core</artifactId>
                          <version>1.2.3</version>
                      </dependency>
                      <dependency>
                          <groupId>junit</groupId>
                          <artifactId>junit</artifactId>
                          <version>${junit.version}</version>
                          <scope>test</scope>
                      </dependency>
                      <dependency>
                          <groupId>log4j</groupId>
                          <artifactId>log4j</artifactId>
                          <version>${log4j.version}</version>
                      </dependency>
                  </dependencies>
              </dependencyManagement>

          創(chuàng)建microservicecloud-api子模塊 創(chuàng)建microservicecloud-api子模塊的pom依賴的架包

           <dependencies><!-- 當(dāng)前Module需要用到的jar包,按自己需求添加,如果父類已經(jīng)包含了,可以不用寫版本號(hào) -->
                  <dependency>
                      <groupId>org.projectlombok</groupId>
                      <artifactId>lombok</artifactId>
                  </dependency>
              </dependencies>

          創(chuàng)建實(shí)體類

          package com.yang.entity;


          import lombok.Data;
          import lombok.NoArgsConstructor;
          import lombok.experimental.Accessors;

          import java.io.Serializable;

          @SuppressWarnings("serial")
          @NoArgsConstructor
          @Data
          @Accessors(chain=true)
          public class Dept implements Serializable {
              private Long  deptno;   //主鍵
              private String  dname;   //部門名稱
              private String  db_source;//來(lái)自那個(gè)數(shù)據(jù)庫(kù),因?yàn)槲⒎?wù)架構(gòu)可以一個(gè)服務(wù)對(duì)應(yīng)一個(gè)數(shù)據(jù)庫(kù),同一個(gè)信息被存儲(chǔ)到不同數(shù)據(jù)庫(kù)

              public Dept(String dname)
              
          {
                  super();
                  this.dname = dname;
              }

          }

          創(chuàng)建microservicecloud-provider-dept-8001 服務(wù)提 供者 加載pom倉(cāng)庫(kù)庫(kù)依賴


              <dependencies>
                  <dependency>
                      <groupId>com.yang</groupId>
                      <artifactId>microservicecloud-api</artifactId>
                      <version>1.0-SNAPSHOT</version>
                  </dependency>


                  <dependency>
                      <groupId>junit</groupId>
                      <artifactId>junit</artifactId>
                  </dependency>
                  <dependency>
                      <groupId>mysql</groupId>
                      <artifactId>mysql-connector-java</artifactId>
                  </dependency>
                  <dependency>
                      <groupId>com.alibaba</groupId>
                      <artifactId>druid</artifactId>
                  </dependency>
                  <dependency>
                      <groupId>ch.qos.logback</groupId>
                      <artifactId>logback-core</artifactId>
                  </dependency>
                  <dependency>
                      <groupId>org.mybatis.spring.boot</groupId>
                      <artifactId>mybatis-spring-boot-starter</artifactId>
                  </dependency>
                  <dependency>
                      <groupId>org.springframework.boot</groupId>
                      <artifactId>spring-boot-starter-jetty</artifactId>
                  </dependency>
                  <dependency>
                      <groupId>org.springframework.boot</groupId>
                      <artifactId>spring-boot-starter-web</artifactId>
                  </dependency>
                  <dependency>
                      <groupId>org.springframework.boot</groupId>
                      <artifactId>spring-boot-starter-test</artifactId>
                  </dependency>
                  <!-- 修改后立即生效,熱部署 -->
                  <dependency>
                      <groupId>org.springframework</groupId>
                      <artifactId>springloaded</artifactId>
                  </dependency>
                  <dependency>
                      <groupId>org.springframework.boot</groupId>
                      <artifactId>spring-boot-devtools</artifactId>
                  </dependency>
                  <dependency>
                      <groupId>com.yang</groupId>
                      <artifactId>microservicecloud-api</artifactId>
                      <version>1.0-SNAPSHOT</version>
                      <scope>compile</scope>
                  </dependency>
              </dependencies>

          創(chuàng)建application.yml配置文件

          server:
            port: 8001
            
          mybatis:
            config-location: classpath:mybatis/mybatis.cfg.xml        # mybatis配置文件所在路徑
            type-aliases-package: com.yang.entity    # 所有Entity別名類所在包
            mapper-locations:
            - classpath:mybatis/mapper/**/*.xml                       # mapper映射文件
              
          spring:
             application:
              name: microservicecloud-dept 
             datasource:
              type: com.alibaba.druid.pool.DruidDataSource            # 當(dāng)前數(shù)據(jù)源操作類型
              driver-class-name: org.gjt.mm.mysql.Driver              # mysql驅(qū)動(dòng)包
              url: jdbc:mysql://localhost:3306/cloudDB01              # 數(shù)據(jù)庫(kù)名稱
              username: root
              password: root
              dbcp2:
                min-idle: 5                                           # 數(shù)據(jù)庫(kù)連接池的最小維持連接數(shù)
                initial-size: 5                                       # 初始化連接數(shù)
                max-total: 5                                          # 最大連接數(shù)
                max-wait-millis: 200                                  # 等待連接獲取的最大超時(shí)時(shí)間
                
          eureka:
            client: #客戶端注冊(cè)進(jìn)eureka服務(wù)列表內(nèi)
              service-url: 
                defaultZone: http://localhost:7001/eureka
          #       defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
            instance:
              instance-id: microservicecloud-dept8001
              prefer-ip-address: true     #訪問(wèn)路徑可以顯示IP地址     
           
          info: 
            app.name: atguigu-microservicecloud
            company.name: www.atguigu.com
            build.artifactId: $project.artifactId$
            build.version: $project.version$

          創(chuàng)建mybatis.cfg.xml配置文件

          <?xml version="1.0" encoding="UTF-8" ?>
          <!DOCTYPE configuration
            PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-config.dtd">

          <configuration>

           <settings>
            <setting name="cacheEnabled" value="true" /><!-- 二級(jí)緩存開(kāi)啟 -->
           </settings>

          </configuration>

          創(chuàng)建deptMapper配置文件

          <?xml version="1.0" encoding="UTF-8" ?>
          <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
          "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

          <mapper namespace="com.yang.dao.DeptDao">

           <select id="findById" resultType="Dept" parameterType="Long">
            select deptno,dname,db_source from dept where deptno=#{deptno};
           </select>
           <select id="findAll" resultType="Dept">
            select deptno,dname,db_source from dept;
           </select>
           <insert id="addDept" parameterType="Dept">
            INSERT INTO dept(dname,db_source) VALUES(#{dname},DATABASE());
           </insert>

          </mapper>

          創(chuàng)建DeptDao層

          package com.yang.dao;

          import com.yang.entity.Dept;
          import org.apache.ibatis.annotations.Mapper;

          import java.util.List;

          @Mapper
          public interface DeptDao {
            public boolean addDept(Dept dept);

            public Dept findById(Long id);

            public List<Dept> findAll();

          }

          創(chuàng)建service接口

          package com.yang.service;

          import com.yang.entity.Dept;

          import java.util.List;

          public interface DeptService {
              public boolean add(Dept dept);
              public Dept    get(Long id);
              public List<Dept> list();
          }

          service的實(shí)現(xiàn)接口impl

          package com.yang.service.impl;


          import com.yang.dao.DeptDao;
          import com.yang.entity.Dept;
          import com.yang.service.DeptService;
          import org.springframework.beans.factory.annotation.Autowired;
          import org.springframework.stereotype.Service;

          import java.util.List;

          @Service
          public class DeptServiceImpl implements DeptService {
              @Autowired
              private DeptDao dao ;

              @Override
              public boolean add(Dept dept)
              
          {
                  return dao.addDept(dept);
              }

              @Override
              public Dept get(Long id)
              
          {
                  return dao.findById(id);
              }

              @Override
              public List<Dept> list()
              
          {
                  return dao.findAll();
              }

          }

          編寫controller層


          package com.yang.controler;


          import com.yang.entity.Dept;
          import com.yang.service.DeptService;
          import org.springframework.beans.factory.annotation.Autowired;
          import org.springframework.web.bind.annotation.*;

          import java.util.List;

          @RestController
          public class DeptController {

              @Autowired
              private DeptService service;

              @RequestMapping(value="/dept/add",method= RequestMethod.POST)
              public boolean add(@RequestBody Dept dept)
              
          {
                  return service.add(dept);
              }

              @RequestMapping(value="/dept/get/{id}",method=RequestMethod.GET)
              public Dept get(@PathVariable("id") Long id)
              
          {
                  return service.get(id);
              }

              @RequestMapping(value="/dept/list",method=RequestMethod.GET)
              public List<Dept> list()
              
          {
                  return service.list();
              }
          }

          創(chuàng)建microservicecloud-customer-dept-8080 消費(fèi)者

          加載pom依賴

           <dependencies>
                  <dependency>
                      <groupId>com.yang</groupId>
                      <artifactId>microservicecloud-api</artifactId>
                      <version>1.0-SNAPSHOT</version>
                  </dependency>
                  <dependency>
                      <groupId>org.springframework.boot</groupId>
                      <artifactId>spring-boot-starter-web</artifactId>
                  </dependency>
                  <!-- 修改后立即生效,熱部署 -->
                  <dependency>
                      <groupId>org.springframework</groupId>
                      <artifactId>springloaded</artifactId>
                  </dependency>
                  <dependency>
                      <groupId>org.springframework.boot</groupId>
                      <artifactId>spring-boot-devtools</artifactId>
                  </dependency>
              </dependencies>

          創(chuàng)建配置類

          RestTemplate

          「RestTemplate」提供了多種便捷訪問(wèn)遠(yuǎn)程Http服務(wù)的方法, 是一種簡(jiǎn)單便捷的訪問(wèn)restful服務(wù)模板類,是Spring提供的用于訪問(wèn)Rest服務(wù)的客戶端模板工具集,官網(wǎng)地址:https://docs.spring.io/spring-framework/docs/4.3.7.RELEASE/javadoc-api/org/springframework/web/client/RestTemplate.html,使用restTemplate訪問(wèn)restful接口非常的簡(jiǎn)單粗暴無(wú)腦。(url, requestMap, ResponseBean.class)這三個(gè)參數(shù)分別代表 REST請(qǐng)求地址、請(qǐng)求參數(shù)、HTTP響應(yīng)轉(zhuǎn)換被轉(zhuǎn)換成的對(duì)象類型。

          package com.yang.springcloud.config;


          import org.springframework.context.annotation.Bean;
          import org.springframework.context.annotation.Configuration;
          import org.springframework.web.client.RestTemplate;

          @Configuration
          public class ConfigBean
          {
              @Bean
              public RestTemplate getRestTemplate()
              
          {
                  return new RestTemplate();
              }
          }

          創(chuàng)建controller層

          package com.yang.springcloud.controller;


          import com.yang.entity.Dept;
          import org.springframework.beans.factory.annotation.Autowired;
          import org.springframework.web.bind.annotation.PathVariable;
          import org.springframework.web.bind.annotation.RequestMapping;
          import org.springframework.web.bind.annotation.RestController;
          import org.springframework.web.client.RestTemplate;

          import java.util.List;

          @RestController
          public class DeptController_Consumer {

              private static final String REST_URL_PREFIX = "http://localhost:8001";

              @Autowired
              private RestTemplate restTemplate;

              @RequestMapping(value="/consumer/dept/add")
              public boolean add(Dept dept)
              
          {
                  return restTemplate.postForObject(REST_URL_PREFIX+"/dept/add", dept, Boolean.class);
              }

              @RequestMapping(value="/consumer/dept/get/{id}")
              public Dept get(@PathVariable("id") Long id)
              
          {
                  return restTemplate.getForObject(REST_URL_PREFIX+"/dept/get/"+id, Dept.class);
              }

              @SuppressWarnings("unchecked")
              @RequestMapping(value="/consumer/dept/list")
              public List<Dept> list()
              
          {
                  return restTemplate.getForObject(REST_URL_PREFIX+"/dept/list", List.class);
              }
          }

          創(chuàng)建啟動(dòng)類

          package com.yang.springcloud;


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


          @SpringBootApplication
          public class DeptConsumer80_App
          {
              public static void main(String[] args)
              
          {
                  SpringApplication.run(DeptConsumer80_App.classargs);
              }
          }


          瀏覽 69
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  学生妹A级毛片 | 无码一卡二卡三卡 | 丰满的大屁股一区二区 | 日本黄色影院在线 | 就要日逼网 |