|
1 | 1 | import json |
| 2 | +from typing import List |
2 | 3 | import nats |
3 | 4 | import asyncio |
4 | 5 |
|
|
7 | 8 | import config |
8 | 9 |
|
9 | 10 |
|
10 | | -async def process(msg): |
11 | | - print(f"Received a message") |
12 | | - |
13 | | - json_data = json.loads(msg.data.decode()) |
14 | | - prepared_search_docs = prepare(SearchDoc( |
15 | | - title=json_data["title"], |
16 | | - author=json_data["author"], |
17 | | - content=json_data["content"], |
18 | | - excerpt=json_data["excerpt"], |
19 | | - date=json_data["date"], |
20 | | - language=json_data["language"], |
21 | | - url=json_data["url"], |
22 | | - )) |
23 | | - |
| 11 | +async def process(msgs: List[nats.aio.msg.Msg]): |
| 12 | + jsonmsgs = [] |
| 13 | + for msg in msgs: |
| 14 | + json_data = json.loads(msg.data.decode()) |
| 15 | + jsonmsgs.append(SearchDoc( |
| 16 | + title=json_data["title"], |
| 17 | + author=json_data["author"], |
| 18 | + content=json_data["content"], |
| 19 | + excerpt=json_data["excerpt"], |
| 20 | + date=json_data["date"], |
| 21 | + language=json_data["language"], |
| 22 | + url=json_data["url"], |
| 23 | + )) |
| 24 | + prepared_search_docs = prepare(jsonmsgs) |
24 | 25 | add(prepared_search_docs) |
25 | 26 |
|
26 | 27 |
|
27 | 28 | async def run(): |
28 | 29 | nc = await nats.connect(config.NATS_URL) |
29 | 30 | js = nc.jetstream() |
30 | 31 |
|
31 | | - await js.subscribe( |
32 | | - config.NATS_STREAM_NAME, |
33 | | - config=nats.js.api.ConsumerConfig(durable_name=config.NATS_CONSUMER_NAME, |
34 | | - ack_policy=nats.js.api.AckPolicy.NONE), |
35 | | - cb=process, |
36 | | - manual_ack=False |
37 | | - ) |
| 32 | + psub = await js.pull_subscribe("*", |
| 33 | + stream=config.NATS_STREAM_NAME, |
| 34 | + durable=config.NATS_CONSUMER_NAME) |
| 35 | + |
| 36 | + while True: |
| 37 | + try: |
| 38 | + msgs = await psub.fetch(10, timeout=5) |
| 39 | + print(f"Fetched {len(msgs)} messages") |
| 40 | + await process(msgs) |
| 41 | + for msg in msgs: |
| 42 | + await msg.ack() |
| 43 | + except asyncio.TimeoutError: |
| 44 | + print("No new messages, waiting...") |
| 45 | + continue |
| 46 | + |
38 | 47 |
|
39 | 48 |
|
40 | 49 | if __name__ == "__main__": |
|
0 commit comments