Qing 1 жил өмнө
parent
commit
35688275a6

+ 14 - 0
novel-cloud-demo/novel-book/src/main/java/com/sf/controller/BookInfoController.java

@@ -0,0 +1,14 @@
+package com.sf.controller;
+
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class BookInfoController {
+
+    @GetMapping("/api/bookInfo/{bookId}")
+    public String getBookInfo(@PathVariable String bookId){
+        return "OK";
+    }
+}

+ 51 - 0
novel-cloud-demo/novel-gateway/pom.xml

@@ -0,0 +1,51 @@
+<?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>
+    <parent>
+        <groupId>com.sf</groupId>
+        <artifactId>novel-cloud-demo</artifactId>
+        <version>0.0.1-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>novel-gateway</artifactId>
+
+    <properties>
+        <maven.compiler.source>17</maven.compiler.source>
+        <maven.compiler.target>17</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+    <dependencies>
+<!--        <dependency>-->
+<!--            <groupId>com.sf</groupId>-->
+<!--            <artifactId>novel-core</artifactId>-->
+<!--            <version>0.0.1-SNAPSHOT</version>-->
+<!--        </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-nacos-config</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-gateway</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-bootstrap</artifactId>
+        </dependency>
+    </dependencies>
+
+</project>

+ 12 - 0
novel-cloud-demo/novel-gateway/src/main/java/com/sf/NovelGatewayApplication.java

@@ -0,0 +1,12 @@
+package com.sf;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class NovelGatewayApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run(NovelGatewayApplication.class, args);
+    }
+}

+ 36 - 0
novel-cloud-demo/novel-gateway/src/main/java/com/sf/config/NovelCorsConfig.java

@@ -0,0 +1,36 @@
+package com.sf.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.cors.CorsConfiguration;
+import org.springframework.web.cors.reactive.CorsWebFilter;
+import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;
+
+/**
+ * 全局跨域配置
+ *
+ * @author xiongxiaoyang
+ * @version 1.0
+ * @since 2020/5/27
+ */
+@Configuration
+public class NovelCorsConfig {
+
+    @Bean
+    public CorsWebFilter corsWebFilter() {
+        CorsConfiguration config = new CorsConfiguration();
+        // 允许的域,不要写*,否则cookie就无法使用了
+        config.addAllowedOrigin("http://localhost:1024");
+        // 允许的头信息
+        config.addAllowedHeader("*");
+        // 允许的请求方式
+        config.addAllowedMethod("*");
+        // 是否允许携带Cookie信息
+        config.setAllowCredentials(true);
+
+        UrlBasedCorsConfigurationSource configurationSource = new UrlBasedCorsConfigurationSource();
+        // 添加映射路径,拦截一切请求
+        configurationSource.registerCorsConfiguration("/**", config);
+        return new CorsWebFilter(configurationSource);
+    }
+}

+ 25 - 0
novel-cloud-demo/novel-gateway/src/main/resources/application.yml

@@ -0,0 +1,25 @@
+server:
+  port: 8888
+
+spring:
+  cloud:
+    nacos:
+      discovery:
+        server-addr: 127.0.0.1:8848
+        username: nacos
+        password: nacos
+    sentinel:
+      transport:
+        # 控制台地址
+        dashboard: 127.0.0.1:8080
+    gateway:
+      routes:
+        - id: novel-home-demo
+#          uri: lb://novel-home-demo
+          uri: http://localhost:19090
+          predicates:
+            - Path=/api/front/home/**
+        - id: novel-book-demo
+          uri: lb://novel-book-demo
+          predicates:
+            - Path=/api/front/book/**

+ 13 - 0
novel-cloud-demo/novel-gateway/src/main/resources/bootstrap.yml

@@ -0,0 +1,13 @@
+spring:
+  application:
+    name: novel-gateway-demo
+  cloud:
+    nacos:
+      config:
+        server-addr: 127.0.0.1:8848
+        username: nacos
+        password: nacos
+        file-extension: yml
+#        extension-configs[0]:
+#          data‐id: novel-mysql.yml
+#          refresh: true

+ 79 - 0
novel-cloud-demo/novel-gateway/src/main/resources/logback-spring.xml

@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration>
+    <!-- 彩色日志依赖的渲染类 -->
+    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
+    <conversionRule conversionWord="wex"
+                    converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
+    <conversionRule conversionWord="wEx"
+                    converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
+    <!-- 彩色日志格式 -->
+    <property name="CONSOLE_LOG_PATTERN"
+              value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
+
+    <!-- %m输出的信息,%p日志级别,%t线程名,%d日期,%c类的全名,%i索引【从数字0开始递增】,,, -->
+    <!-- appender是configuration的子节点,是负责写日志的组件。 -->
+    <!-- ConsoleAppender:把日志输出到控制台 -->
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder>
+            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
+            <!-- 控制台也要使用UTF-8,不要使用GBK,否则会中文乱码 -->
+            <charset>UTF-8</charset>
+        </encoder>
+    </appender>
+
+    <!-- RollingFileAppender:滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 -->
+    <!-- 以下的大概意思是:1.先按日期存日志,日期变了,将前一天的日志文件名重命名为XXX%日期%索引,新的日志仍然是demo.log -->
+    <!-- 2.如果日期没有发生变化,但是当前日志的文件大小超过1KB时,对当前日志进行分割 重命名 -->
+    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+
+        <File>logs/novel-gateway.log</File>
+        <!-- rollingPolicy:当发生滚动时,决定 RollingFileAppender 的行为,涉及文件移动和重命名。 -->
+        <!-- TimeBasedRollingPolicy: 最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 活动文件的名字会根据fileNamePattern的值,每隔一段时间改变一次 -->
+            <!-- 文件名:logs/demo.2017-12-05.0.log -->
+            <fileNamePattern>logs/debug.%d.%i.log</fileNamePattern>
+            <!-- 每产生一个日志文件,该日志文件的保存期限为30天 -->
+            <maxHistory>30</maxHistory>
+            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <!-- maxFileSize:这是活动文件的大小,默认值是10MB,测试时可改成1KB看效果 -->
+                <maxFileSize>10MB</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+        </rollingPolicy>
+        <encoder>
+            <!-- pattern节点,用来设置日志的输入格式 -->
+            <pattern>
+                %d %p (%file:%line\)- %m%n
+            </pattern>
+            <!-- 记录日志的编码:此处设置字符集 - -->
+            <charset>UTF-8</charset>
+        </encoder>
+    </appender>
+    <springProfile name="dev">
+        <!-- ROOT 日志级别 -->
+        <root level="INFO">
+            <appender-ref ref="STDOUT"/>
+            <appender-ref ref="FILE"/>
+        </root>
+        <!-- 指定项目中某个包,当有日志操作行为时的日志记录级别 -->
+        <!-- com.maijinjie.springboot 为根包,也就是只要是发生在这个根包下面的所有日志操作行为的权限都是DEBUG -->
+        <!-- 级别依次为【从高到低】:FATAL > ERROR > WARN > INFO > DEBUG > TRACE -->
+        <logger name="io.github.xxyopen" level="DEBUG" additivity="false">
+            <appender-ref ref="STDOUT"/>
+            <appender-ref ref="FILE"/>
+        </logger>
+    </springProfile>
+
+    <springProfile name="prod">
+        <!-- ROOT 日志级别 -->
+        <root level="INFO">
+            <appender-ref ref="FILE"/>
+        </root>
+        <!-- 指定项目中某个包,当有日志操作行为时的日志记录级别 -->
+        <!-- com.maijinjie.springboot 为根包,也就是只要是发生在这个根包下面的所有日志操作行为的权限都是DEBUG -->
+        <!-- 级别依次为【从高到低】:FATAL > ERROR > WARN > INFO > DEBUG > TRACE -->
+        <logger name="io.github.xxyopen" level="ERROR" additivity="false">
+            <appender-ref ref="FILE"/>
+        </logger>
+    </springProfile>
+</configuration>

+ 2 - 0
novel-cloud-demo/novel-home/src/main/java/com/sf/NovelHomeApplication.java

@@ -3,7 +3,9 @@ package com.sf;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+import org.springframework.cloud.openfeign.EnableFeignClients;
 
+@EnableFeignClients
 @SpringBootApplication
 @EnableDiscoveryClient
 public class NovelHomeApplication {

+ 15 - 0
novel-cloud-demo/novel-home/src/main/java/com/sf/client/BookInfoClient.java

@@ -0,0 +1,15 @@
+package com.sf.client;
+
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+
+@Component
+@FeignClient(value = "novel-book-demo")
+public interface BookInfoClient {
+
+    @GetMapping("/api/bookInfo/{bookId}")
+    String getBookInfo(@PathVariable String bookId);
+
+}

+ 7 - 2
novel-cloud-demo/novel-home/src/main/java/com/sf/controller/HomeController.java

@@ -1,15 +1,20 @@
 package com.sf.controller;
 
+import com.sf.client.BookInfoClient;
 import com.sf.novel.core.resp.RestResp;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 @RestController
 public class HomeController {
 
+    @Autowired
+    private BookInfoClient bookInfoClient;
+
     @GetMapping("/test")
-    public RestResp test(){
-        return null;
+    public String test(){
+        return bookInfoClient.getBookInfo("111");
     }
 
 }