如何在多个代理或浮士德计时器之间共享浮士德表?

3zwtqj6y  于 2021-06-04  发布在  Kafka
关注(0)|答案(1)|浏览(316)

我试图在一段时间后将浮士德表的数据(count)发布到Kafka主题中。当我发布一些简单的字符串时,计时器正在工作,但它无法以某种方式访问表的数据。以下是计时器的代码:

@app.timer(interval=10.0)
async def publish_to_anomaly_topic():
            await anomaly_topic.send(
            value=str(page_views['total'].value())
          )
@app.agent(page_view_topic)
async def count_page_views(views):
    async for view in views.group_by(PageView.id):
        total=0
        page_views[view.id]+=1
        for everykey in list(page_views.keys()):
            if everykey != 'total':
                total+=page_views[everykey].value()
        page_views['total'] = total

代理工作正常。我能够正确地看到这些值。

q1qsirdb

q1qsirdb1#

经过大量的实验,结果证明,您无法使用app计时器访问表的值(即使您在创建表时指定了relative\ field选项)。解决这个问题的一个方法是创建另一个表来维护消息的时间戳,并在业务逻辑中使用它们。

if view.timestamp-page_views_timer[view.id+'_first_timestamp'] > 60:
         await anomaly_topic.send(value={//the data to be sent})

其中page\u views\u timer是创建的新表。

相关问题