如何使服务器发送事件(SSE)通过 Zuul 代理 spring-boot 2.1.1 工作

2024-03-24

我在通过 zuul 反向代理让 SSE 工作时遇到一些问题

我的设置:

Spring boot version: 2.1.1.RELEASE
Spring cloud dependencies: Greenwich.RC1
Angular-cli: Angular 7
Kotlin: 1.3.11
os: Linux

我有一个使用 SSE 的小型休息服务

@SpringBootApplication
@RestController
@CrossOrigin("http://localhost:19195")
class RestApplication {
    private final val processor = DirectProcessor.create<Int>().serialize()
    private final val sink = processor.sink()
    private final val counter = AtomicInteger()

    @GetMapping("/stream")
    fun stream(): Flux<ServerSentEvent<Int>> {
        println("Stream connected")
        return processor.map { n -> ServerSentEvent.builder<Int>(n).build() }
    }

    @GetMapping("/increment")
    fun sink() {
        sink.next(counter.incrementAndGet())
    }

}

如果我的 EventSource 从我的角度服务直接连接到它,那么效果很好:

const sse = new EventSource('http://localhost:8080/stream');
sse.onopen = (event) => {
  console.log('OnOpen ' + event);
};
sse.onmessage = (event) => {
  console.log(event);
sse.onerror = (error) => {
  console.log(error);
};

如果我点击 /increment 端点,服务就会收到带有递增值的 sse 事件。

现在有了这个 zuul 配置:

zuul:
 sensitive-headers:
 routes:
  rest:
    path: /rest/**
    url: http://192.168.75.90:8080
 add-proxy-headers: true
 add-host-header: true

Angular 服务已更新为通过代理进行:

const sse = new EventSource('rest/stream');
sse.onopen = (event) => {
  console.log('OnOpen ' + event);
};
sse.onmessage = (event) => {
console.log(event);

};
sse.onerror = (error) => {
console.log(error);
};

现在我的角度服务连接到流,等待默认的 zuul 超时(10 秒),然后返回 406 并重新连接。那是如果我没有数据。

如果我的接收器中有数据,它会连接到 sse 流,只要我将数据推送到流中,就不会发生任何事情。当我停止推送数据时,EventSource 等待 zuul 超时(10 秒),然后接收流上的所有数据并断开/重新连接。

我知道 zuul 1.x 不支持 SSE,但我希望与 spring boot 2.1.1 捆绑的 zuul 能够支持。

有人知道吗?


问题是你使用的是 Zuul 1.x,即使你使用的是 springboot 2.x 版本。我遇到了同样的问题,而且 Spring Cloud Netflix 目前和将来似乎不会支持 Zuul 2.x。所以当你使用spring cloud环境时,我建议切换到春季云网关 https://spring.io/projects/spring-cloud-gateway。我正在 SSE 中使用它,我对当前的解决方案感到满意。另一种选择是直接切换到 Zuul 2.0。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使服务器发送事件(SSE)通过 Zuul 代理 spring-boot 2.1.1 工作 的相关文章

  • Angular 2 Observable 具有多个订阅者

    我有一个 Angular 2 服务 可以从 API 获取数据 该服务有 3 个订阅者 在组件中定义 每个订阅者都对数据执行其他操作 不同的图表 我注意到我正在向 API 发出三个 GET 请求 而我想要实现的是一个请求 并且订阅者将共享数据
  • 为什么线程比协程表现出更好的性能?

    我编写了 3 个简单的程序来测试协程相对于线程的性能优势 每个程序都会执行许多常见的简单计算 所有程序都彼此分开运行 除了执行时间之外 我还通过以下方式测量了 CPU 使用率Visual VMIDE 插件 第一个程序使用以下方法进行所有计算
  • 如何在 Angular 单元测试中创建假 NgForm 对象?

    我有一个带有如下模板的组件 Template
  • 401 Unauthorized("detail":"未提供身份验证凭据。")

    我在后端使用 djoser 的身份验证 当我通过具有内容类型和授权标头的邮递员在 account me 发出获取请求时 我得到了正确的响应 但是当我尝试从我的角度客户端执行相同的请求时 我得到401 Unauthorized detail
  • Moshi 无法解析 nullable

    你好 希望你能帮助我 使用 kotlin Retrofit2 moshi 我从 https api spacexdata com v3 launches 获取数据并解析它 一切都很顺利 我得到的属性如下 flight number miss
  • 错误:链接引用失败。 -> 排队作业

    我正在使用 Kotlin 学习 Android Material Design 一切都很顺利 直到我尝试使用 android support design widget FloatingActionButton 当我重建项目时 我收到以下错
  • 在 Spring Webflux 中执行阻塞 JDBC 调用

    我使用 Spring Webflux 和 Spring data jpa 使用 PostgreSql 作为后端数据库 我不想在进行数据库调用时阻塞主线程 例如find and save 为了实现同样的目标 我有一个主调度程序Controll
  • Spring Boot 中 application.properties 可用的属性列表?

    Spring Boot文档说我们可以在application properties文件中设置属性 但我找不到列出可以设置的可用属性的文档 我在哪里可以找到这样的文档 例如 我想为嵌入式servlet设置documentRoot 我发现set
  • http.put 请求在 Angular2 中执行两次

    我正在尝试更新从我的 Angular2 应用程序调用 API 的公司记录 我在调试时注意到 http 调用被执行了两次 我找到了另一个堆栈溢出线程 https stackoverflow com questions 37241294 ang
  • 跨延迟加载路由创建共享模块

    我正在构建一个 Angular 11 应用程序并尝试创建一个SharedModule 我正在使用延迟加载 并希望避免在延迟加载的路由中多次加载公共模块 我创建了一个共享模块并将其导入到我的AppModule 根据我的理解 这个共享模块应该在
  • 在viewpager2中禁用动画

    我有 viewpager2 和扩展 FragmentStateAdapter 的适配器 我希望用户仅通过单击选项卡布局即可转到另一个页面 我已禁用此 viewpager2 的用户输入 但是当我单击选项卡时 有页面之间快速滑动的动画 但我只想
  • 如何将 Android Room 数据库中的 Not Null 表列迁移为 Null

    我是 Android 房间库的新手 我需要将 Not Null 列迁移到 Null 但房间迁移只允许在 ALTER 表查询中添加或重命名 如何执行列迁移查询 Entity tableName vehicle detail data clas
  • 如何在 RxJS 订阅方法中等待

    在 RxJS 主题的订阅回调内部 我想要await on an async功能 下面是打字稿转译器抱怨的代码示例 错误 131 21 TS2304 找不到名称 await async ngOnInit this subscriber dat
  • 使用“mvncompilejib:build”推送到 Docker 注册表失败

    我正在尝试使用以下命令构建并将我的 docker 映像部署到私有注册表谷歌联合投资银行Maven 插件 但是 它因访问私有注册表时出现问题而失败 我已经安装了Docker 桌面 v19 03 1 on my Windows 10机器 接下来
  • 如何使用 Google 的 GithubBrowserSample 方法在片段之间共享视图模型?

    我对 Android 架构组件的使用非常陌生 因此我决定使用 GithubBrowserSample 来构建我的应用程序来实现我的许多用例 但我有一个问题 我不知道使用这种方法在片段之间共享视图模型的正确方法是什么 我想共享视图模型 因为我
  • 在 Angular 中深度复制对象

    AngularJS 有angular copy 深度复制对象和数组 Angular 也有类似的东西吗 您还可以使用 JSON parse JSON stringify Object 如果它在你的范围内 那么它就存在于每个 Angular 组
  • 如何更改 Swagger-ui URL 前缀?

    我正在使用 Springfox Swagger2 和 Spring boot 1 5 9 我可以通过此链接访问 swagger UI http localhost 8090 swagger ui html http localhost 80
  • Spring Boot 中的 JSTL 支持

    虽然我知道有JSP 支持中的一些限制 http docs spring io spring boot docs current reference html boot features developing web applications
  • Windows 10 中的 npm 安装错误( npm install -g angular-cli )

    node v v4 5 0 npm v 5 0 1 有人在 Windows 10 中安装 angular cli 时遇到过这种问题吗 请尝试以下操作 step 0 运行这个命令 npm uninstall g angular cli npm
  • 未捕获的 Kotlin 异常:kotlin.native.In CorrectDereferenceException:非法尝试访问非共享

    我尝试使用 Kotlin MPP Multiplatform 开发 Android 和 iOS 之间的共享库 但我面临着 iOS 中线程的问题 对于我在 iOS 中的应用程序 我在主线程中建立了对象 但它可能调用其他线程中的函数并抛出此异常

随机推荐

  • 类型错误:无法在反应中读取 null 的属性“名称”

    我对 React 和 Redux 很陌生 所以在做了大量研究后我无法轻松解决这个错误 我试图以卡片的形式在单独的页面中显示用户的个人资料 但出现错误 TypeError Cannot read property name of null P
  • 我们如何在 Apache Arrow 中存储哈希表?

    我对 Apache Arrow 很陌生 所以这个问题可能是无知的 Apache Arrow 提供了以标准化内存格式存储原始类型 结构 数组等数据结构的功能 我想知道是否可以使用 Apache Arrow 存储更复杂的数据结构 如哈希表 或平
  • javascript date getYear() 在 IE 和 Firefox 之间返回不同的结果,如何解决这个问题?

    显然 javascript日期对象的方法 getYear 在 IE8 和 Firefox3 6 之间返回不同的结果 我的机器上有这两个 不确定其他浏览器或版本 Date d new Date alert d getYear FF3 6 gt
  • 如何在iis 7.5中使Asp.net网站离线

    我有一个 ASP NET 网站 但我想在我的客户尝试访问该网站时显示 正在维护 页面 有谁知道如何做到这一点 如果您在 NET 4 0 应用程序池 IIS 7 0 或 IIS 7 5 中运行应用程序 或者您的网站配置为 ASP NET 4
  • Angular - 周围的条件 div 容器

    在我的 app component html 中 我想根据当前 url 渲染某些 div 容器 例如 1 如果当前 URL 是authenticate 则呈现以下内容 div div
  • nvm ls-remote 命令结果为“N/A”

    我正在尝试使用 nvm 安装 Node 但是当我输入任何版本时它都不可用 当我打字时nvm ls remote我只是得到 不适用 我可以访问互联网 所以我不知道会发生什么 更新维护 nvm sh 的 LJHarb 的评论 LJHarb 表示
  • 声明 @synthesize 时单下划线和双下划线的区别

    在最近的 Xcode 4 3 项目模板中 一些 synthesze声明为 synthesize window window synthesize managedObjectContext managedObjectContext synth
  • 无法推送到 Gitlab 注册表 | Quarkus - 臂架构建

    我目前正在开发 Quarkus 应用程序 因此需要 CI 管道 容器注册表 由于通过 docker 的容器化不起作用 docker 守护进程 特权模式 我想使用 Jib Quarkus 已经支持它 管道中的命令 mvn clean pack
  • 有没有办法动态配置 nginx(或其他快速反向代理)?

    假设我们有几个相同的节点 它们是某个 n 层服务的应用程序服务器 假设我们使用 Apache ZooKeeper 来保存分布式应用程序的所有配置 另外 我们在此应用程序前面有一个 nginx 作为负载均衡器和反向代理 假设我们执行的命令仅更
  • 使用BIOS int 13h访问不同磁头的扇区

    我的磁盘每磁道有 63 个扇区 根据我的观察 我假设 我想使用 int 13h 读取 16 位引导加载程序上的扇区 例如 如果我想读取扇区号 63 我将执行以下操作 mov dl 0x80 Drive number mov dh 0 Thi
  • 如何在d3中增量绘制网格?

    下面是一个 HTML 文件 它将绘制一个 10x10 的浅灰色和深灰色交替的正方形网格 它填充一个名为的二维数组the grid与 0 或 1 然后填充一个名为的一维数组nodes with x y and color 然后画nodes与
  • JUnitCore 停止

    我想停止 销毁正在运行的 JUnitCore 它的启动方式是 JUnitCore run Request aClass ClassToRun Like pleaseStop 在 RunNotifier 上 有任何想法吗 http junit
  • ajax 请求后重新加载 dojo 小部件

    我是这个主题的新手 我有 div 里面有一些 dojo 小部件 我使用 ajax 重新加载这个 div 但是之后我的 dojo 小部件没有显示 我怎样才能让我的浏览器在ajax请求后再次重新加载小部件 我不想重新加载整个页面 我的ajax视
  • Polymer 2.0:通知并反映到属性

    我是这个框架的新手 希望看到一些有用且简单的通知和反映属性属性的示例 请保持示例简单或为您提供的任何代码添加解释 Notify 可以设置为 True False 假设你有parent element and child element 工作
  • python 的斯坦福大学 nlp

    我想做的就是找到任何给定字符串的情绪 积极 消极 中性 在研究过程中 我遇到了斯坦福 NLP 但遗憾的是它是在 Java 中 关于如何让它适用于 python 有什么想法吗 Use py corenlp https github com s
  • 线程实现(C#)

    您能给我一个使用线程的程序的简单示例吗 我不明白线程及其使用以及何时使用它 谢谢 有一个here http msdn microsoft com en us library aa645740 28VS 71 29 aspx 和一个非常简单的
  • 创建一个 python 服务器以使用套接字向 Android 应用程序发送数据

    我正在尝试使用 python 中的套接字 我的电脑 创建一个简单的聊天服务器程序来与我的 Android 客户端代码 我的 Android 手机 进行通信 我有一个简单的服务器代码 它接收消息 但当我尝试从服务器向客户端发送消息时 它会阻止
  • 在新订单电子邮件通知中获取客户订单数

    如果是回头客 我想在 WooCommerce 新订单 电子邮件通知中注明 看起来很简单 但我尝试了大约 5 种不同的方法 但没有一个有效 我尝试将其放入两个不同的钩子中 woocommerce email after order table
  • BigIntegers、gcd、模逆来查找公钥

    所以 我使用 java 来查找 RSA 密码的公钥 现在我不确定我在做什么 也不确定它是否正确 我有公钥的信息 C 5449089907 n p q 8271344041 q 181123 p n q 45667 d 53 phi n p
  • 如何使服务器发送事件(SSE)通过 Zuul 代理 spring-boot 2.1.1 工作

    我在通过 zuul 反向代理让 SSE 工作时遇到一些问题 我的设置 Spring boot version 2 1 1 RELEASE Spring cloud dependencies Greenwich RC1 Angular cli