问题标签 [tcp-keepalive]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
rabbitmq - 为什么 SpringBoot RabbitMQ 客户端自动关闭连接到 rabbitmq 服务器
**
得到rabbitmq连接错误如下。
**
2019-07-11 13:14:51.147.AMQP 连接 127.0.0.1:5672> 错误 - TID[] UID[] MID[] CID[] - 通道关闭:连接错误;协议方法:#method(reply-code=541, reply-text=INTERNAL_ERROR, class-id=0, method-id=0) 2019-07-11 13:14:51.831.bulkNotificationContainer-100> WARN - TID[] UID[] MID[] CID[] - 消费者引发异常,如果连接工厂支持,处理可以重新启动 com.rabbitmq.client.ShutdownSignalException: 连接错误;协议方法:#method(reply-code=541, reply-text=INTERNAL_ERROR, class-id=0, method-id=0) at com.rabbitmq.client.impl.AMQConnection.startShutdown(AMQConnection.java:742) ~ [amqp-client-3.6.5.jar!/:na] 在 com.rabbitmq.client.impl.AMQConnection.shutdown(AMQConnection.java:732) ~[amqp-client-3.6.5.jar!/:na]在 com.rabbitmq.client.impl.AMQConnection。
我的 spring-boot 服务使用 rabbitmq 异步发送推送通知。因此,通过 rabbitmq 推送有效负载发布/接收,然后在 FCM 上发送。但是,此连接在过去一年中正常工作,没有任何问题。但是今天早上rabbitmq服务器重启如下
- rabbitmq 停止
- 杀死进程bean(相关的erlang)
- rabbitmq 启动
之后我们成功重启spring-boot服务,health-api显示rabbit-up状态。
但尝试发送推送时出错。
应用程序属性配置。
spring.rabbitmq.host=127.0.0.1 spring.rabbitmq.port=5672 spring.rabbitmq.username=rabbitadmin spring.rabbitmq.password=admin
自定义配置
rabbitmq.listeners.retry-policy = UNIFORM_RANDOM_DELAY rabbitmq.listeners.max-interval=15000 rabbitmq.listener.push-router.concurrent-consumers=2 rabbitmq.listener.push-router.max-concurrent-consumers=10
rabbitmq.binding.push-notification.queue.name=pushqueue rabbitmq.binding.push-notification.exchange.name=pushexchange rabbitmq.binding.push-notification.binding.routing-key=pushroute-binding
我想将数据发布/接收到rabbitmq 频道。
c - 如何在 VxWorks 中为特定套接字 fd(非系统范围)设置 TCP 保持活动间隔?
我在一个应用程序中创建了一个 TCP 套接字,并为此套接字启用了 KEEPALIVE。我可以看到keepalive数据包以我已经在iptcp的系统变量中设置的keepalive间隔的频率出现,即30secs。
套接字创建:
VxWorks TCP 系统变量:
如上所述,根据系统变量,它工作正常。在连续 3 个数据包丢失后,我的连接关闭后,我会以 30 秒的间隔收到保持活动的数据包。一切都作为系统变量工作正常。但是这个 TCP 系统变量配置对于所有启用了保持活动的套接字都是相同的。
我只想为我创建的套接字设置此保持活动间隔,而不是为整个系统设置。
我已经尝试使用 setsockopt 设置保持活动间隔。
和
上述 setsockopt 都返回相同的错误状态,即不支持操作。(45,IP_ERRNO_EOPNOTSUPP)
在这里,我想将 TCP KEEP ALIVE INTERVAL 设置为 5 秒。
我希望为特定的套接字 fd 设置 tcp 保持活动间隔。
编辑:这个问题不是How to set keepalive option for induvidual socket in VxWorks的副本 那个问题没有我的答案。请检查。第一个答案是我在这里问的同一个问题,在第二个答案中链接不起作用。
linux - 套接字保持活动不能按预期在 Linux 上工作
我正在使用此代码设置套接字以检测网络错误:
我这样调用上面的函数:
我希望套接字在网络错误后 40 秒后断开连接。但是,在远程端出现网络错误后,大约需要 170 秒。
知道我做错了什么吗?
haproxy - 在 Keepalived 中没有调用“通知”
我在文件中有这些设置,keepalived.conf
但是当我停止HAProxy
服务时,它没有执行通知脚本,但是当我重新启动keepalived
服务时,它每次都会执行。以下是详细信息,
HAProxy: 1.8.8
保活: 2.0.18
操作系统: Ubuntu 18.04
蟒蛇: 2.7
云服务提供商: Hetzner
/etc/keepalived/keepalived.conf
/etc/keepalived/master.sh
/usr/local/bin/assign-ip
当我停止使用 HAProxy 服务器sudo service haproxy stop
并检查我收到此响应的状态时,
在/var/log/syslog我得到了这个,
但是通知脚本不会被调用,浮动 ip 也不会分配给 BACKUP 实例。因为我真的很陌生,Keepalived
任何人都可以帮我解决这个问题吗?
更新:我已经解决了这个问题
接口应该是private
网络,并且必须指定MASTER
和BACKUP
使用unicast_src_ip
和的私有ip unicast_peer
。修改设置在这里,
ssh - 由于“packet_write_wait: Connection to 192.168.xx.yyy port 22: Broken pipe”而导致空闲 ssh 会话丢失的解决方法
这是场景:你 ssh 进入远程 linux 主机,让终端空闲一段时间,然后回来发现连接已断开。
您已阅读有关在连接上设置 keep-alive 的建议,并尝试过,但仍然失败。
您甚至可能了解 screen 和/或 tmux,但仍宁愿不必如此频繁地重新连接。
有没有办法做到这一点?
java - 在spring服务器中发送长异步请求时保持活动状态
我在春天有一个控制器,它获取一个作为异步处理的 POST 请求(使用DeferredResult
对象作为返回值)。
此请求的响应是直接将字节写入 HTTP 流(HttpServletResponse.getWriter().print()
),当它完成写入时,它会在DeferredResult
对象上设置结果以关闭连接。
我正在以流块的形式写我的回复。我在此请求处理中遇到问题,因为如果我在 1 分钟内不写信,客户端将关闭连接。(我可以写一些块然后停止写 1 分钟 - 因此连接将在我的过程中间关闭)。
我想控制关闭连接过程 - 我想keep alive
在不向流中写入任何数据时发送,以便在我决定从服务器端关闭连接之前不会关闭连接。
我不知道如何从服务器中的控制器控制连接。请协助。谢谢。
sockets - 如何使用 TCP keep_alive 属性来获得有关无响应对等点事件的通知?
场景:
我有一个使用boost::asio 1.63编写的客户端和服务器。一般来说,连接和通信部分工作得很好。
我在两边都写了一个看门狗,它以 2 秒的间隔向对等方发送虚拟数据包。看门狗的目标是,如果相关对等方在接下来的 2 秒内没有收到它所期望的虚拟数据包,则它会报告连接错误。这对我来说甚至更重要,因为这两个对等点可能不会出于任何用户目的处理数据包,但是如果任何对等点出现故障,它们中的每一个都需要报告连接错误。即使由于内核崩溃,对等方也可能出现故障,在这种情况下,该对等方将无法发送消息。这当然是一个经典问题,甚至超越了 asio 和 TCP。
我的看门狗运行良好。完全没有问题。
但是,最近我读到了套接字中的keep_alive功能。我尝试了以下代码,似乎我可以通过在我的代码中使用boost::asio
.
问题:
以上代码在 macOS、Linux 和 iOS 上编译良好。看起来很棒。但是,我如何从中受益?当对等体出现故障时,这会给我一个回调或事件吗?这能让我从编写上面描述的看门狗中解放出来吗?
我曾经boost::asio::async_connect
连接到对等方。当 perr 在定义的超时间隔后下降时,我可以回调我的 connectionHandler 吗?
设置keep_alive
选项后,我如何才能知道我的对等方不再响应?
linux - IPPROTO_TCP 或 SOL_SOCKET
我在 TCP 套接字上的对等方之间有一个简单的 P2P 连接。我的客户端和服务器都在Linux上运行。我已经在两边的 TCP 套接字上打开了TCP keep_alive 功能。我正在使用boost::asio来连接、读取两边我的 tcp 套接字上的写入数据。
tcp keep_alive示例使用IPPROTO_TCP
并且SOL_SOCKET
令人困惑。以下是我在套接字上设置的属性。但是我很困惑是使用IPPROTO_TCP
还是SOL_SOCKET
因为它们在两个平台上都编译得很好。
代码:
或者
问题:
我SOL_SOCKET
应该双面使用还是应该IPPROTO_TCP
双面使用?有没有办法在运行时决定这个?请注意,我有非常简单的点对点 wifi 连接。
http - 为什么服务器的吞吐量是上游响应时间的函数?
我有一个应用程序服务器,它只向上游服务发送请求,等待,然后用从上游服务接收的数据响应客户端。微服务需要X
ms 来响应,有时也需要Y
ms,where X<<Y
。客户端响应时间(在稳定状态下)基本上等于上游微服务处理请求所花费的时间——任何额外的延迟都可以忽略不计,因为客户端、应用程序服务器和上游微服务都位于同一个数据中心,并通过具有非常大网络带宽的私有 IP 进行通信。
当客户端开始以 0 的速率发送请求时N
,应用程序服务器会变得过载,并且响应时间会随着服务器变得不稳定而急剧增加。客户端和微服务的 CPU 使用率最低,应用服务器的 CPU 使用率最高。(应用服务器的裸机比其他两个服务要弱得多——这是一个测试环境,用于监控应用服务器在压力下的行为。)
直观地说,无论微服务响应需要多长时间,我都希望N
得到相同的值,但我发现当微服务花费 ms 时,稳定状态下的最大吞吐量明显低于Y
仅花费X
ms 时。发生这种情况时使用的临时端口的数量也大大低于限制。由于读取和写入的数量相同,内存使用量相同,我无法弄清楚为什么N
是微服务执行时间的一个因素。此外,不,无论执行时间如何,服务的输入/输出都是相同的,因此写入的字节数是相同的。由于唯一的区别是执行时间,它只需要在响应需要一段时间时使用更多的 TCP 连接,我不确定为什么最大吞吐量会受到影响?据我了解,一旦建立 TCP 连接,其成本可以忽略不计。
我错过了什么吗?
谢谢,
额外细节:
这些服务使用带有 keepalive 的 HTTP/1.1,没有流水线。还应该提到我正在使用 IO-Thread 模型。如果我每个请求都使用一个线程,我可以理解这种行为,但是每个核心只有一个线程,这很令人困惑。