小编Ral*_*eus的帖子

使用 RPC 后端获取 Celery 任务结果

我正在努力从 Celery 任务中获取结果。我的应用程序入口点如下所示:

from app import create_app,celery
celery.conf.task_default_queue = 'order_master'
order_app = create_app('../config.order_master.py')
Run Code Online (Sandbox Code Playgroud)

现在,在启动应用程序之前,我启动 RabbitMQ 并确保它没有队列:

root@3d2e6b124780:/# rabbitmqctl list_queues
Timeout: 60.0 seconds ...
Listing queues for vhost / ...
root@3d2e6b124780:/#
Run Code Online (Sandbox Code Playgroud)

现在我开始应用程序。启动后,我仍然在 RabbitMQ 中看到没有队列。当我从应用程序启动任务时,jobs.add_together.delay(2, 3)我得到任务 ID:

ralfeus@web-2 /v/w/order (multiple-instances)> (order) curl localhost/test
{"result":"a2c07de4-f9f2-4b21-ae47-c6d92f2a7dfe"}
ralfeus@web-2 /v/w/order (multiple-instances)> (order)
Run Code Online (Sandbox Code Playgroud)

那一刻我可以看到我的队列有一条消息:

root@3d2e6b124780:/# rabbitmqctl list_queues
Timeout: 60.0 seconds ...
Listing queues for vhost / ...
name    messages
dd65ba89-cce9-3e0b-8252-c2216912a910    0
order_master   1
root@3d2e6b124780:/# 
Run Code Online (Sandbox Code Playgroud)

现在我启动 Celery 工作者:

ralfeus@web-2 /v/w/order (multiple-instances)>
/usr/virtualfish/order/bin/celery -A main_order_master:celery worker --loglevel=INFO …
Run Code Online (Sandbox Code Playgroud)

python rabbitmq celery flask

7
推荐指数
1
解决办法
2765
查看次数

通过HTTPS进行边缘跨域请求

我正在尝试进行Edge扩展,它将与除网页原点之外的其他服务器进行通信.然而,沟通似乎失败了.

当源是外部的并且跨域请求目标在Intranet中时,我读到了有关跨域请求的问题.所以我将内联网服务器暴露在互联网上.但这没有帮助.

我试图尽可能简单地运行fetch()并获得此结果:

fetch(" https://fake.domain.info/api/browser/authenticate/ ").then((response)=> {console.log(response);}).catch((error)=> {console.日志(误差);})

[对象承诺]:{}

[object Error]:{description:"无法获取",消息:"无法获取",编号:-2147418113}

我检查了调试窗口中的网络流量,发现了奇怪的记录:

名称协议方法结果内容类型接收时间发起者 https://fake.domain.info/api/browser/authenticate/ HTTPS GET 200(来自缓存)0 s

我真的不明白为什么会出现"(来自缓存)".所以用WireShark检查了请求.我发现的是这个:

61 3.004629 xxx.xxx.xxx.xxx 192.168.124.144 TLSv1.2 501服务器Hello,证书,服务器密钥交换,服务器Hello完成

62 3.004666 192.168.124.144 xxx.xxx.xxx.xxx TCP 54 51965→443 [ACK] Seq = 207 Ack = 1908 Win = 261632 Len = 0

...

86 3.010645 192.168.124.144 xxx.xxx.xxx.xxx TCP 54 51965→443 [FIN,ACK] Seq = 207 Ack = 1908 Win = 261632 Len = 0

87 3.011785 xxx.xxx.xxx.xxx 192.168.124.144 TCP 60 443→51965 [ACK] Seq = 1908 Ack = 208 …

https cross-domain microsoft-edge

6
推荐指数
0
解决办法
507
查看次数

IEnumerable.Except()如何工作?

我试图排除要添加到数据库中的实体(如果它们已经存在)。因此,我认为newBillInstances.Except(dbContext.BillInstances)这是最好的方法。但是,它完全不起作用(不排除任何实体),因为List<string>它可以完美地工作。

我读了这个讨论和实际能解密.Except()MSDN。它指出.Except()要实现的类应IEqualityComparer<T>使用默认比较器。

实际上,MSDN文章并未完全描述两个实例的比较过程。我仍然不明白为什么Equals()和GetHashObject()都必须被覆盖。

我已经实现了IEqualityComparer<BillInstance>接口,并在两种方法中都设置了断点,但是在调用.Except(IEnumerable)它时并未使用。只有当我更改为时,我才会.Except(IEnumerable, new BillInstanceComparer())咳嗽,GetHashCode()但咳嗽不会中断Equals()

然后,我IEqualityComparer<BillInstance>BillInstance类中实现了正确的方法,并期望在使用时可以使用它,.Except(IEnumerable)但是两种方法都不会造成中断。

所以我有两个问题:

  1. 应该做什么使用.Except(IEnumerable)
  2. 为什么Equals()根本不使用?是否仅在两个实例的哈希码相同的情况下使用?

c# linq ienumerable

3
推荐指数
1
解决办法
828
查看次数

重载PHP"新"运算符

我正在寻找一种new在PHP中重载运算符的方法.我已经搜索过,似乎不可能.但可能有不同的方式来实现我的需要.

我在不同的文件中定义了一堆类.为了创建类的实例,我必须首先包含该文件.但是我不想在每个new指令之前跟包含函数的调用文件.我更喜欢new重新定义运算符,以便在创建类实例之前包含必要的文件.

有没有优雅的方法来实现这一目标?

php oop

2
推荐指数
1
解决办法
446
查看次数

剑道网格 saveChanges() 不起作用

我正在尝试使用自定义命令按钮设置行的状态字段。网格数据源传输定义如下:

transport: {
  read: {
    url: "/agent/AgentList",
    type: "POST",
    dataType: "json",
    data: addAntiForgeryToken
  },
  update: {
    url: "/agent/UpdateAgent",
    type: "POST",
    dataType: "json",
    data: addAntiForgeryToken
  }
},
Run Code Online (Sandbox Code Playgroud)

自定义命令定义如下:

{
  command: [
    {
      name: "accept",
      visible: function(dataItem) {
        return dataItem.StatusId === 1;
      },
      text: "@T("Ralfeus.Agent.Accept")",
      click: function(e) {setOfferResponse(this, e, 2);}
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

实际设置字段的函数定义如下:

function setOfferResponse(grid, sender, response) {
  sender.preventDefault();
  var dataItem = grid.dataItem($(sender.currentTarget).closest("tr"));
  dataItem.StatusId = response;
  grid.editRow($(sender.currentTarget).closest("tr"));
  grid.saveChanges();
}
Run Code Online (Sandbox Code Playgroud)

我期望 saveChanges() 调用触发数据源传输的更新方法。但是,它既不会向服务器发出任何请求,也不会报告错误。

我还尝试将 grid.saveChanges() 替换为 grid.dataSource.sync() (顺便说一下 - 有什么区别?)正如这里建议的那样 …

kendo-grid

2
推荐指数
1
解决办法
1995
查看次数