我的Zookeeper通过在每个节点中保存相关的作业数据来控制不同作业的几个不同队列,直到计算机准备好处理.如果我停止整个服务,那么没有任何作业可以启动ZooKeeper在重启后运行正常.但是,其中一些作业似乎导致ZooKeeper崩溃,并在ZooKeeper日志中显示以下消息:
WARN [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@349] - caught end of stream exception
EndOfStreamException: Unable to read additional data from client sessionid 0x15677f740ad002a, likely client has closed socket
at org.apache.zookeeper.server.NIOServerCnxn.doIO(NIOServerCnxn.java:220)
at org.apache.zookeeper.server.NIOServerCnxnFactory.run(NIOServerCnxnFactory.java:208)
at java.lang.Thread.run(Thread.java:745)
INFO [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@1001] - Closed socket connection for client /127.0.0.1:46998 which had sessionid 0x15677f740ad002a
Run Code Online (Sandbox Code Playgroud)
我的ZooKeeper知识非常有限,因为我接替了最初设置它的人.
我试图rmr [path]在zookeeper shell中删除很多节点,这似乎有一些效果(删除了50k +剩下的/没有用的节点),但它每天都在崩溃,昨晚我无法得到它会在发生同样的错误/崩溃之前运行超过几分钟.
我如何找出导致这种情况的原因?
我很确定这是收到的数据或存储的数据/节点的一般问题.磁盘仅满92%.我还发现了这篇文章:Zookeeper不断得到WARN:"抓住了流末端异常",但解决方案对我来说没有多大意义.另外我很确定我的znode中保存的消息都不超过1MB,但我不确定如何确认这一点.
有没有什么方法可以更改ZooKeeper日志,以便我可以打印其他信息,例如它崩溃之前运行的znode的内容/名称?
我有一个应用程序,它不通过控制器接收普通 HTTP 请求,而是侦听并接收消息(AMQP 协议)以启动其逻辑流。
我的应用程序一次可能会接收和处理多于 1 条消息。我有一个对象,它将在整个过程中在几个不同的服务/类中收集信息/数据,以便我最终使用它。但我需要根据收到的消息将数据分开,因为“范围”注入会将注入的实例与其他 HTTP 请求分开。
因此,我的用例与我在普通 API 中使用 Scoped 注入对象的方式非常相似,但我在侦听器中收到一条消息,而不是新的 HTTP 请求。
有什么方法可以为收到的每条消息创建一个自定义范围,无论是通过某种配置,还是让代码创建一个新范围作为我的 Listener.MessageReceived(Message message) 方法中的第一件事?
想象一下这样的流程:
public class Listener {
ServiceClassA serviceClassA //injected in constructor
CustomLogger customLogger // (HAS TO BE SAME OBJECT INJECTED INTO ServiceClassA, ServiceClassB and Listener)
public void ReceiveMessage(Message message) {
using (var scope = CreateNewScope()) {
try {
serviceClassA.DoStuff();
} catch(Exception e) {
Console.Write(customLogger.GetLogs())
}
}
}
}
public class ServiceClassA {
ServiceClassB serviceClassB //injected in constructor
CustomLogger customLogger //(HAS TO …Run Code Online (Sandbox Code Playgroud) 在对.NET Core进行2.0更改后,我无法找到有关此特定问题的信息.
我有这样的cookie授权:
services.AddAuthentication("ExampleCookieAuthenticationScheme")
.AddCookie("ExampleCookieAuthenticationScheme", options => {
options.AccessDeniedPath = "/Account/Forbidden/";
options.LoginPath = "/Account/Login/";
});
Run Code Online (Sandbox Code Playgroud)
对于另一部分(我的控制器,我想简单地基于一个简单的标题进行授权.在我发现的例子中,要么我无法获得标题,要么它们仅用于facebook,google,cookies等.
如何在.Net core 2.0中添加执行简单标头检查的授权?
编辑:澄清问题:
我已经重写了基类型的 JsonConverter (通过应用于[JsonConverter(typeof(TConverter))]超类),但是当直接反序列化子类型时,我想使用 STANDARD 序列化(即没有自定义转换器)来反序列化我的派生对象。如何指定在反序列化方法中使用的标准序列化,就好像我没有覆盖 JsonConverter 一样?
我正在使用弹性搜索,无法使用 JsonConverter 的自定义实现调用 JsonConvert.DeserializeObject,并且必须依赖 Elastic 的属性来使用我的转换器。
但是,使用此转换器作为属性似乎也会影响所有子类,但我只是希望它们使用标准转换器,这样我就不必为每个实现都实现 JsonConverter 。
这是我希望它看起来的类/逻辑:
[Route("test")]
[HttpPost]
public HttpResponseMessage Test([FromBody] JToken json)
{
var res = json.ToObject<Product>(); // I want an object of ProductImpl type here
return Request.CreateResponse(res);
}
[JsonConverter(typeof(JsonProductConverted))]
public abstract class Product
{
}
public class ProductImpl : Product
{
}
public class JsonProductConverted : JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override …Run Code Online (Sandbox Code Playgroud)