我有6个容器在docker swarm中运行.Kafka + Zookeeper,MongoDB,A,B,C和Interface.接口是public的主要访问点 - 只有这个容器发布端口 - 5683.接口容器在启动时连接到A,B和C. 我正在使用docker-compose文件+ docker堆栈部署,每个服务都有一个名称,用作接口的主机.一切都成功开始,工作正常.一段时间后(20分钟,1小时......),我无法提出接口请求.接口接收我的请求但应用程序丢失了与服务A,B,C或所有服务的连接.如果我重新启动接口,它可以重新连接到服务A,B,C.
我首先认为这是应用程序的问题,所以我在每个服务(接口,A,B,C)上公开了2个新端口,并与它们连接了探查器和调试器.应用程序正常运行,没有泄漏,没有阻塞的线程,正常工作并等待连接.调试器向我显示,当我向接口发出请求并且接口尝试请求服务A时,抛出了由对等异常重置的连接.
在调试期间,我发现了有趣的东西.我在服务启动时将调试器附加到接口,并且一段时间后调试器也断开连接.+我无法重新连接它,直到我向容器 - >应用程序发出请求.PRoblem - 握手失败.
我发现的另一个有趣的东西是我无法请求任何接口.所以我用wireshark来看看发生了什么事:SYN-ACK很好.然后应用程序发布一些数据和接口响应FIN,ACK.我假设当接口尝试请求服务A并且FIN连接时也会发生这种情况.接口,A,B和C的代码库与netty服务器相同.
最后,我不认为这是一个应用程序问题.为什么?我试图将容器部署为服务.我分别运行每个容器,发布每个端口并将服务端点设置为localhost.(不覆盖网络).它正在发挥作用.容器运行没有问题.+我一开始没有说,java应用程序(接口,A,B,C)在作为独立应用程序运行时运行没有问题 - 而不是在docker中运行.
你能帮我解决一下这个问题吗?为什么在覆盖网络的情况下docker正在关闭套接字?
我正在使用最新的码头工具.我也用过了.
从JSON文件加载配置时,我想使用其他属性名称进行配置。
public class MinioConfiguration
{
[DataMember(Name = "MINIO_ENDPOINT")]
public string Endpoint { get; set; }
[DataMember(Name = "MINIO_ACCESS_KEY")]
public string AccessKey { get; set; }
[DataMember(Name = "MINIO_SECRET_KEY")]
public string SecretKey { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
既不DataMember也不JsonProperty工作。有可能实现吗?
使用C#7新的Tuple特性,我们应该能够通过它从类型派生的名称来访问字段.
public (double lat, double lng) GetLatLng(string address) { ... }
var ll = GetLatLng("some address");
Console.WriteLine($"Lat: {ll.lat}, Long: {ll.lng}");
Run Code Online (Sandbox Code Playgroud)
这在.NET Core中是不可能的.为什么?- > 仅适用于Item1; 项目2.不是.lat .lng.
谢谢
很明显,基于这些模式的系统很容易扩展.但我想问你,究竟是怎么回事?关于可伸缩性我几乎没有问题:
aggregate A,如何同步它们?如果其中一个实例处理该命令并创建一个事件,那么该事件应该传播到该agregate的每个实例?aggregate A (ORDERS)并适用于某个特定订单的命令,则将它传递给同一个实例是有意义的.要么?在本文中:https://initiate.andela.com/event-sourcing-and-cqrs-a-look-at-kafka-e0c1b90d17d8,他们正在使用Kafka进行分区.因此,用户管理服务 - 聚合被缩放,但仅订阅主题的特定分区,其包含特定用户的所有事件.
谢谢!