小编Mic*_*ini的帖子

使用clojure core.async管道处理错误

我试图了解使用core.async/pipeline处理错误的正确方法是什么,我的管道如下:

input     --> xf-run-computation --> first-out
first-out --> xf-run-computation --> last-out
Run Code Online (Sandbox Code Playgroud)

xf-run-computationhttp会在哪里进行调用并返回响应.但是,其中一些响应将返回错误.处理这些错误的最佳方法是什么?我的解决办法是在分裂输出通道success-valueserror-values,然后将它们合并回一个信道:

(let [[success-values1 error-values1] (split fn-to-split first-out)
      [success-values2 error-values2] (split fn-to-split last-out)
      errors (merge [error-values1 error-values2])]
(pipeline 4 first-out xf-run-computation input)
(pipeline 4 last-out  xf-run-computation success-values1)
[last-out errors])
Run Code Online (Sandbox Code Playgroud)

所以我的函数将返回最后的结果和错误.

error-handling pipeline clojure core.async

6
推荐指数
1
解决办法
940
查看次数

使用karma和webpack运行测试

我的项目有外部依赖,所以我配置了webpack:

externals:{
        'd3':'d3',
        'another-external-dep': 'another-external-dep'
}
Run Code Online (Sandbox Code Playgroud)

然后在代码中我需要这样的依赖:

var someProp = require('another-external-dep').someProp.

一切都很好,直到我整合业力.因此,当运行测试时,业力无法another-external-dep清楚地找到模块,因为它是外部依赖,并且我没有包含在文件列表中的karma配置中.

我如何模拟another-external-dep这样require('another-external-dep')返回模拟?还有我可以在配置或模拟中指定这个模拟的地方?

commonjs karma-runner webpack

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

Kafka 在有状态处理中验证消息

我有一个应用程序,多个用户可以发送 REST 操作来修改共享对象的状态。当一个对象被修改时,将会发生多个操作(数据库、审计、日志记录......)。

并非所有操作都有效,例如您无法在删除对象后对其进行修改。

使用 Kafka 我正在考虑以下架构:

  1. 剩余操作在 Kafka 主题中排队。
  2. 对同一对象的操作将针对同一分区。因此该对象的所有操作都将按顺序并由消费者处理
  3. 消费者正在监听分区并使用内存数据库验证操作
  4. 如果操作有效,则发送到“有效操作主题”,否则发送到“无效操作主题”
  5. 其他消费者(db、log、audit)正在监听“有效操作主题”

我不太确定第三点。我不喜欢保留所有对象的状态的想法。(我有数十亿个对象,即使一个对象的大小可以达到 10mb,我需要存储来验证其状态的也只是几 KB...

然而,这是一种常见的模式吗?否则如何验证某些操作的有效性?

另外,您将使用什么作为内存数据库?当然它必须具有高可用性、容错性并支持事务(读和写)。

streaming in-memory-database apache-kafka kafka-consumer-api apache-kafka-streams

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