最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java之SpringCloud nocos注冊中心講解

 更新時間:2021年08月10日 09:08:42   作者:深情以改  
這篇文章主要介紹了Java之SpringCloud nocos注冊中心講解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下

一、nacos是什么?

Nacos是用來發(fā)現(xiàn)、配置和管理微服務。Nacos提供了一組簡單易用的特性集,幫助快速實現(xiàn)動態(tài)服務發(fā)現(xiàn)服務配置、服務元數(shù)據流量管理。

二、使用步驟

1.安裝nacos 服務器

直接運行 startup.cmd 訪問 localhost:8848/nacos
初始密碼 nacos nacos

在這里插入圖片描述

2.導入依賴和配置yaml

在這里插入圖片描述

父項目依賴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.csdn</groupId>
    <artifactId>springcloud_nacos</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>springcloud_share_6002</module>
        <module>springcloud_user_6001</module>
        <module>springcloud_common</module>
    </modules>
    <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>
        <lombok.version>1.18.16</lombok.version>
        <log4j.version>1.2.17</log4j.version>
        <logback-core.version>1.2.3</logback-core.version>
        <mysql-connector-java.version>8.0.21</mysql-connector-java.version>
        <druid.version>1.1.23</druid.version>
        <mybatis-spring-boot-starter.version>2.1.4</mybatis-spring-boot-starter.version>
        <spring-boot-dependencies.version>2.3.8.RELEASE</spring-boot-dependencies.version>
        <spring-cloud-dependencies.version>Hoxton.SR9</spring-cloud-dependencies.version>
        <spring-cloud-alibaba.version>2.2.3.RELEASE</spring-cloud-alibaba.version>
        <swagger.version>2.7.0</swagger.version>
        <pagehelper.version>1.2.3</pagehelper.version>
        <jodatime.version>2.10.1</jodatime.version>
        <jjwt.version>0.10.7</jjwt.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <!--很重要的包:springcloud的依賴-->
            <!-- <scope>import</scope>解決單繼承問題,類似parent標簽, -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud-dependencies.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--spring-cloud-alibaba-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-cloud-alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--springboot-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot-dependencies.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--數(shù)據庫-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql-connector-java.version}</version>
            </dependency>
            <!--數(shù)據源-->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>${druid.version}</version>
            </dependency>
            <!--mybatis的springboot啟動器-->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>${mybatis-spring-boot-starter.version}</version>
            </dependency>
            <!--日志測試-->
            <!--junit-->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
            </dependency>
            <!--lombok-->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
            </dependency>
            <!--log4j-->
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>${log4j.version}</version>
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-core</artifactId>
                <version>${logback-core.version}</version>
            </dependency>
            <!--swagger-->
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger2</artifactId>
                <version>${swagger.version}</version>
            </dependency>
            <!--swagger ui-->
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger-ui</artifactId>
                <version>${swagger.version}</version>
            </dependency>
            <!--druid alibaba-->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>${druid.version}</version>
            </dependency>
            <dependency>
                <groupId>com.github.pagehelper</groupId>
                <artifactId>pagehelper-spring-boot-starter</artifactId>
                <version>${pagehelper.version}</version>
            </dependency>
            <!--日期時間工具-->
            <dependency>
                <groupId>joda-time</groupId>
                <artifactId>joda-time</artifactId>
                <version>${jodatime.version}</version>
            </dependency>

            <!-- JWT -->
            <dependency>
                <groupId>io.jsonwebtoken</groupId>
                <artifactId>jjwt-api</artifactId>
                <version>${jjwt.version}</version>
            </dependency>
            <dependency>
                <groupId>io.jsonwebtoken</groupId>
                <artifactId>jjwt-impl</artifactId>
                <version>${jjwt.version}</version>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>io.jsonwebtoken</groupId>
                <artifactId>jjwt-jackson</artifactId>
                <version>${jjwt.version}</version>
                <scope>runtime</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <build>
        <!--打包插件-->
    </build>
</project>

在需要被nacos發(fā)現(xiàn)的微服務個module加上nacos依賴

<!--服務注冊-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

springcloud_common的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">
    <parent>
        <artifactId>springcloud_nacos</artifactId>
        <groupId>com.csdn</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>springcloud_common</artifactId>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <!--swagger-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
        </dependency>
        <!--spring默認使用yml中的配置,但有時候要用傳統(tǒng)的xml或properties配置,就需要使用spring-boot-configuration-processor了-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>
        <!--服務注冊-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--服務容錯-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>
        <!--feign-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <!-- JWT -->
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt-api</artifactId>
        </dependency>
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt-impl</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt-jackson</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-sleuth</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zipkin</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>
</project>

在這里插入圖片描述

@Configuration
@EnableSwagger2
public class Swagger2Config {

    /**
     * 定義接口的總體信息
     *
     * @return
     */
    private ApiInfo webApiInfo() {

        return new ApiInfoBuilder()
                .title("Swagger API 文檔")
                .description("即使再小的帆也能遠航")
                .version("1.0")
                .contact(new Contact("liar", "http://www.jsxllht.com", "**********6@qq.com"))
                .build();
    }

    private ApiInfo adminApiInfo() {

        return new ApiInfoBuilder()
                .title("Swagger Admin 文檔")
                .description("即使再小的帆也能遠航")
                .version("1.0")
                .contact(new Contact("liar", "http://www.jsxllht.com", "**********6@qq.co"))
                .build();
    }

    @Bean
    public Docket webApiConfig() {

        return new Docket(DocumentationType.SWAGGER_2)
                .groupName("webApi") // 用戶組
                .apiInfo(webApiInfo()) // 組的信息
                .select()
                //只顯示api路徑下的頁面
                .paths(Predicates.and(PathSelectors.regex("/api/.*")))  // 用戶接口的判斷
                .build();

    }

    @Bean
    public Docket adminApiConfig() {

        return new Docket(DocumentationType.SWAGGER_2)
                .groupName("adminApi") // 管路⚪組
                .apiInfo(adminApiInfo()) // 組的信息
                .select()
                //只顯示admin路徑下的頁面
                .paths(Predicates.and(PathSelectors.regex("/admin/.*")))
                .build();

    }
}
/**
 *  業(yè)務異常類
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class AppException extends RuntimeException{

    private String code;
    private String message;

    public AppException(ResponseEnum responseEnum){
        this.code = responseEnum.getCode();
        this.message = responseEnum.getMessage();
    }
}
// 這是一個controller 的增強類【專門在controller 拋出異常的時候  增強】
@ControllerAdvice
public class ControllerExceptionAdvice {

    /**
     *  如果拋出的是 AppException 的增強
     *  返回值 就是返回的頁面
     *  參數(shù): controller 拋出的異常
     */
    @ExceptionHandler(AppException.class)
    @ResponseBody
    public R appExceptionHandler(AppException ex, HttpServletRequest request){
       return new R(ex.getCode(),ex.getMessage(),null);
    }

    /**
     *  如果拋出的是Exception 的增強
     */
    @ExceptionHandler(Exception.class)
    @ResponseBody
    public R exceptionHandler(Exception ex, HttpServletRequest request){
        ex.printStackTrace();
        return new R(ResponseEnum.SYSTEM_ERROR,null);
    }
}
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
// 創(chuàng)建統(tǒng)一的返回格式
public class R<T> {

    private String code;
    private String message;
    private T data;

    public R(ResponseEnum responseEnum, T data) {
        this.code = responseEnum.getCode();
        this.message = responseEnum.getMessage();
        this.data = data;
    }
}
public enum ResponseEnum {
    SUCCESS("200","成功003"),
    USERNAME_NOT_FOUND("300","用戶名不存在"),
    USERNAME_OR_PASSWORD_INVALIDATE("301","用戶名或者密碼錯誤"),
    ROLE_NO_MENUS("302","此角色沒有任何菜單權限,請盡早分配"),
    HAS_NO_TOKEN("303","還沒有登錄"),
    TOKEN_ERROR("304","別想試圖偽造令牌"),
    TOKEN_TIMEOUT("305","對不起登錄狀態(tài)已經失效,請重新登錄"),
    HAS_NO_RIGHT("306","權限不足"),
    SYSTEM_ERROR("500","發(fā)生未知異常。。。"),
    FEIGN_BSUY("307","系統(tǒng)正忙,稍后再試。。"),
    FLOW_BLOCK("308","流量被限制了,請稍后再使"),
    DEG_BLOCK("309","系統(tǒng)很忙,稍后再試。。。"),
    SMS_ERROR("310","短信發(fā)送失敗,請稍后再試。。。"),
    SMS_SEND_ERROR_BUSINESS_LIMIT_CONTROL("311","發(fā)送短信太頻繁,過會再發(fā)。。。"),
    CODE_ERROR("312","驗證碼錯誤請重試"),
    CODE_EXCPTION("313","驗證碼超時"),
    ACCOUNT_NO_EXISTS("314","用戶不存在"),
    STATUS_BE_MODIFIED("315","用戶已被審核")
    ;
    private String code;
    private String message;

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    ResponseEnum(String code, String message) {
        this.code = code;
        this.message = message;
    }
}

springcloud_user_6001的yaml(在注冊中心服務的名字 不能一樣)

server:
  port: 6001
#數(shù)據源
spring:
  datasource:
    druid:
      url: jdbc:mysql://localhost:3306/hub_user_center?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT
      driver-class-name: com.mysql.cj.jdbc.Driver
      username: root
      password: 123456
      initial-size: 10
      max-active: 50
      min-idle: 10
      max-wait: 60000
      pool-prepared-statements: true
      max-pool-prepared-statement-per-connection-size: 20
      # mysql 數(shù)據庫的特征  會關閉已經連接了8個小時的連接
      validation-query: SELECT 1 FROM DUAL
  application:
    name: user-6001
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
# mybatis 配置
mybatis:
  # 掃描映射文件
  mapper-locations: classpath:mapper/*.xml
  configuration:
    # 開啟駝峰映射配置
    map-underscore-to-camel-case: true
# log
# 整個工程只答應info 以及以上級別的日志
logging:
  level:
    root: info
    com.csqf.mapper: debug																									

springcloud_share_6002的yaml(在注冊中心服務的名字 不能一樣)

server:
  port: 6002
#數(shù)據源
spring:
  datasource:
    druid:
      url: jdbc:mysql://localhost:3306/hub_share_center?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT
      driver-class-name: com.mysql.cj.jdbc.Driver
      username: root
      password: 123456
      initial-size: 10
      max-active: 50
      min-idle: 10
      max-wait: 60000
      pool-prepared-statements: true
      max-pool-prepared-statement-per-connection-size: 20
      # mysql 數(shù)據庫的特征  會關閉已經連接了8個小時的連接
      validation-query: SELECT 1 FROM DUAL
  application:
    name: share-6002
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
# mybatis 配置
mybatis:
  # 掃描映射文件
  mapper-locations: classpath:mapper/*.xml
  configuration:
    # 開啟駝峰映射配置
    map-underscore-to-camel-case: true
# log
# 整個工程只答應info 以及以上級別的日志
logging:
  level:
    root: info
    com.csqf.mapper: debug

2.RestTemplate

RestTemplate是Spring Resources中一個訪問第三方RESTful API接口的網絡請求框架。RestTemplate的設計原則和其他Spring Template(例如JdbcTemplate、JmsTemplate)類!,都是為執(zhí)行復雜任務提供了一個具有默認行為的簡單方法。

設置RestTemplate為Bean

在這里插入圖片描述

springcloud_user_6001中寫一個查詢方法代碼如下(示例):

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public String getUserById(Integer id) {
        User user = userMapper.selectByPrimaryKey(id);
        if ("".equals(user)){
            return "";
        }
        return user.getUserName();
    }
}

在springcloud_share_6002寫一個DTO(示例):
繼承Share實力類,加上user中返回的userName

@Data
public class ShareDto extends Share {
    private String userName;
}

在springcloud_share_6002中使用RestTemplate調用user并得到userName

@RestController
@RequestMapping("/api/share")
public class ShareContoller {
    @Autowired
    private ShareServiceImpl shareService;
    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/{id}")
    public R getShareById(@PathVariable("id") Integer id){
        Share share = shareService.getShareById(id);
       R r = restTemplate.getForObject("http://localhost:6001/api/user/" + share.getUserId(), R.class);
        String s = r.getData().toString();
        ShareDto shareDto = new ShareDto();
        BeanUtils.copyProperties(share,shareDto);
        shareDto.setUserName(s);
        return new R(ResponseEnum.SUCCESS,shareDto);
    }
}

最后訪問swagger(http://localhost:6002/swagger-ui.html)測試得到dto實體類中的對象

總結

nacos的作用就是一個注冊中心,用來管理注冊上來的各個微服務。

到此這篇關于Java之SpringCloud nocos注冊中心講解的文章就介紹到這了,更多相關Java之SpringCloud nocos內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • java仿微信搖一搖實現(xiàn)播放音樂

    java仿微信搖一搖實現(xiàn)播放音樂

    這篇文章主要為大家詳細介紹了java仿微信搖一搖實現(xiàn)播放音樂,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • Springboot測試類沒有bean注入問題解析

    Springboot測試類沒有bean注入問題解析

    這篇文章主要介紹了Springboot測試類沒有bean注入問題解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • Java線程重復執(zhí)行以及操作共享變量的代碼示例

    Java線程重復執(zhí)行以及操作共享變量的代碼示例

    這篇文章主要介紹了Java中對線程重復執(zhí)行以及操作共享變量的代碼示例,來自于Java面試題目的練習整理,需要的朋友可以參考下
    2015-12-12
  • SpringBoot限制接口訪問頻率避坑

    SpringBoot限制接口訪問頻率避坑

    這篇文章主要為大家介紹了SpringBoot限制接口訪問頻率避坑,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • Java中的匿名對象定義與用法實例分析

    Java中的匿名對象定義與用法實例分析

    這篇文章主要介紹了Java中的匿名對象定義與用法,結合實例形式分析了java匿名對象的概念、原理、定義與相關使用注意事項,需要的朋友可以參考下
    2019-08-08
  • Java并發(fā)編程之同步容器

    Java并發(fā)編程之同步容器

    這篇文章主要介紹了Java并發(fā)編程之同步容器,文中有非常詳細的代碼示例,對正在學習java的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-05-05
  • Spring Boot集成Spring Cloud Security進行安全增強的方法

    Spring Boot集成Spring Cloud Security進行安全增強的方法

    Spring Cloud Security是Spring Security的擴展,它提供了對Spring Cloud體系中的服務認證和授權的支持,包括OAuth2、JWT等,這篇文章主要介紹了Spring Boot集成Spring Cloud Security進行安全增強,需要的朋友可以參考下
    2024-11-11
  • 關于maven打包出錯的解決方案

    關于maven打包出錯的解決方案

    這篇文章主要介紹了關于maven打包出錯的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Java異常類型以及處理實例詳解

    Java異常類型以及處理實例詳解

    在程序設計中,進行異常處理是非常關鍵和重要的一部分,一個程序的異常處理框架的好壞直接影響到整個項目的代碼質量以及后期維護成本和難度,這篇文章主要給大家介紹了關于Java異常類型以及處理的相關資料,需要的朋友可以參考下
    2021-07-07
  • spring  mybatis多數(shù)據源實例詳解

    spring mybatis多數(shù)據源實例詳解

    本文主要介紹sping mybatis多數(shù)據源處理,在開發(fā)過程中經常會遇到多個數(shù)據庫,這里給大家舉例說明如何處理,希望能幫助有需要的小伙伴
    2016-07-07

最新評論

左权县| 阳东县| 大埔区| 万源市| 绥阳县| 万源市| 绥阳县| 汝州市| 海门市| 崇礼县| 龙胜| 屏东县| 米脂县| 镇雄县| 信丰县| 宕昌县| 绩溪县| 桂东县| 城固县| 博客| 武陟县| 永仁县| 汉阴县| 多伦县| 扎兰屯市| 芒康县| 泸西县| 尖扎县| 伊川县| 承德市| 叙永县| 云梦县| 确山县| 江西省| 惠来县| 松溪县| 武汉市| 青冈县| 江川县| 田东县| 东港市|