IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 微服务架构下ajax请求响应处理实践 -> 正文阅读

[JavaScript知识库]微服务架构下ajax请求响应处理实践

第一步:业务描述?(通过sca-ui工程向网关工程发送ajax请求,并进行响应处理)

?¨è?é??¥????è?°

?第二步:创建sca-ui工程,例如:

?¨è?é??¥????è?°

目录结构:

?

第二步:在sca-ui工程中添加spring-boot-starter-web依赖。

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

?第三步:在sca-ui工程中启动类,例如:

package com.jt;

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

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

第四步:在sca-ui工程创建static目录,在此目录下添加js文件,html文件,例如:

?¨è?é??¥????è?°

第五步:在sca-gateway的配置文件中添加跨域配置,例如:?

?第六步:在HTML文件中判断自己定义的规则

方式一

在idea 启动配置中心(nacos)和网关(sentinel)或者黑窗口启动

?分别在浏览器访问:

nacos注册中心:

http://localhost:8848/nacos????????????

sentinel服务:

http://localhost:8180

配置sentinel服务:

?打开浏览器访问:

?方法二:

?配置sentinel服务:

?

?打开浏览器访问:

?代码如下:

1.idex.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
  <div>
    <h2>The Index Page</h2>
    <button onclick="doBuy()">Buy</button>
    <span id="result"></span>
  </div>
  <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
  <!--<script src="/js/axios.min.js"></script>-->
  <script>
     function doBuy(){

     /*    debugger*/
        //1.基于axios框架发送异步ajax请求
         let url="http://localhost:9000/nacos/provider/echo/1"
         let span=document.getElementById("result");
         axios.get(url)
             .then(function (response) {//请求ok,执行then
                 console.log(response.data);
                 if(response.data.state===429){
                     span.innerHTML = response.data.message
                 }else {
                     span.innerHTML = response.data
                 }

             })
             .catch(function (error) {
                 //console.log(error);
                 if(error.response.status==429){
                     span.innerHTML = error.response.statusText;
                 }
             });
        //2.将响应结果更新到页面上
     }
 </script>
</body>
</html>

2.DemoUIApplication.java

package com.jt;

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

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

3,bootstrap.yml

server:
  port: 9000
spring:
  application:
    name: sca-gateway
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
      config:
        server-addr: localhost:8848 #配置中心地址
        file-extension: yml
    gateway:
      routes: #配置网关路由规则
        - id: route01  #路由id,自己指定一个唯一值即可
          #uri: http://localhost:8081/ #网关帮我们转发的url
          uri: lb://sca-provider #lb表示负载均衡,sca-provider为服务名
          predicates: ###断言(谓词):匹配请求规则(进行逻辑判断) http://ip:port/nacos/provider/echo/01
            - Path=/nacos/provider/echo/**  #请求路径定义,此路径对应uri中的资源
#            - After=2021-11-20T23:59:59.789+08:00[Asia/Shanghai]
            #- Query=pageSize,\d+
          filters: ##网关过滤器,用于对谓词中的内容进行判断分析以及处理
            - StripPrefix=1 #转发之前去掉path中第一层路径,例如nacos
      globalcors:
        cors-configurations:
          '[/**]':
#            "*":这个表示任意路径
            allowedOrigins: "*"
#            "*":这个表示任意请求
            allowedMethods: "*"

#限流设计及实现
    sentinel:
      eager: true
      transport:
        dashboard: localhost:8180
#我们打开浏览器输入http://localhost:9000/nacos/provider/echo/01时,
#网关会基于predicates对象对请求url基于predicates中的定义path进行比对,
#假如请求url端口号后面的内容,与predicates中path的定义是匹配的,此时会将url交给filters进行过滤
#过滤器filter对请求过滤后,会将请求地址转发到真实的微服务(通过uri指定)

4,GatewayConfig.java

package com.jt;

import com.alibaba.csp.sentinel.adapter.gateway.sc.callback.BlockRequestHandler;
import com.alibaba.csp.sentinel.adapter.gateway.sc.callback.GatewayCallbackManager;
import com.alibaba.fastjson.JSON;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.reactive.function.server.ServerResponse;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;

import java.util.HashMap;
import java.util.Map;

@Configuration
public class GatewayConfig {
    public GatewayConfig(){
        GatewayCallbackManager.setBlockHandler(new BlockRequestHandler() {
            @Override
            public Mono<ServerResponse> handleRequest(ServerWebExchange serverWebExchange, Throwable throwable) {
                Map<String,Object> map=new HashMap<>();
                map.put("state",429);
                map.put("message","访问太频繁");
                String jsonStr= JSON.toJSONString(map);
                return ServerResponse.ok().body(Mono.just(jsonStr),String.class);
            }
        });
    }
}

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-01 17:37:04  更:2021-12-01 17:38:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:03:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码