Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

listener app never receives request respone #272

Closed
tekumara opened this issue Sep 19, 2023 · 8 comments
Closed

listener app never receives request respone #272

tekumara opened this issue Sep 19, 2023 · 8 comments

Comments

@tekumara
Copy link

❯ python3 listener_app.py

======================================================================================
Panini service connected to NATS..
id: 68
name: listener_app__non_docker_env_597593__302149

NATS brokers:
*  nats://127.0.0.1:4222

JetStream enabled: False
======================================================================================

event {'data': 'event1234567890'} from some.subject.for.stream has been processed
event {'data': 'event1234567890'} from some.subject.for.stream has been processed
event {'data': 'event1234567890'} from some.subject.for.stream has been processed
event {'data': 'event1234567890'} from some.subject.for.stream has been processed
event {'data': 'event1234567890'} from some.subject.for.stream has been processed
event {'data': 'event1234567890'} from some.subject.for.stream has been processed
event {'data': 'event1234567890'} from some.subject.for.stream has been processed
event {'data': 'event1234567890'} from some.subject.for.stream has been processed
event {'data': 'event1234567890'} from some.subject.for.stream has been processed
event {'data': 'event1234567890'} from some.subject.for.stream has been processed
event {'data': 'event1234567890'} from some.subject.for.stream has been processed
event {'data': 'event1234567890'} from some.subject.for.stream has been processed
event {'data': 'event1234567890'} from some.subject.for.stream has been processed
event {'data': 'event1234567890'} from some.subject.for.stream has been processed
event {'data': 'event1234567890'} from some.subject.for.stream has been processed

panini==0.8.2
nats-py==2.2.0
nats-python==0.8.0

@artas728
Copy link
Collaborator

👋 Hello @tekumara ,

Thank you for bringing this to our attention. From the logs and code snippets you've provided, it looks like your listener_app is connected to NATS in core mode (JetStream enabled: False). This means it's using the traditional NATS approach for handling messages.

However, if you intend to use JetStream capabilities, the approach required for message handling is different than core NATS.

To use JetStream with Panini, you need to:

  1. Enable JetStream (enable_js=True).
  2. Properly configure your streams and consumers, as demonstrated in the JetStream publisher microservice example from the documentation: https://panini.technology/JetStream.html .

If you have further questions or face any issues, please don't hesitate to ask. We're here to help!

@tekumara tekumara changed the title listener app never receives stream messages listener app never receives request respone Sep 23, 2023
@tekumara
Copy link
Author

Thanks @artas728 sorry I didn't describe the issue well. I'm following the README and expecting to see multiple request has been processed log lines from the listener_app but I don't see any.

As per the README I'm expecting:

event {'data': 'event1234567890'} from some.subject.for.stream has been processed
request {'data': 'request1234567890'} from some.subject.for.request has been processed
event {'data': 'event1234567890'} from some.subject.for.stream has been processed
request {'data': 'request1234567890'} from some.subject.for.request has been processed
event {'data': 'event1234567890'} from some.subject.for.stream has been processed
request {'data': 'request1234567890'} from some.subject.for.request has been processed
event {'data': 'event1234567890'} from some.subject.for.stream has been processed
request {'data': 'request1234567890'} from some.subject.for.request has been processed
event {'data': 'event1234567890'} from some.subject.for.stream has been processed
request {'data': 'request1234567890'} from some.subject.for.request has been processed
event {'data': 'event1234567890'} from some.subject.for.stream has been processed
request {'data': 'request1234567890'} from some.subject.for.request has been processed

@artas728
Copy link
Collaborator

Hello @tekumara,

Thank you for clarifying the issue. It seems like there might be a step missing in your setup. To see the expected 'request has been processed' log lines, you also need to run sender_app.py along with listener_app.py, as outlined in the README. The sender_app.py will act as another microservice that sends the requests which listener_app is supposed to receive and process.

Here is a brief step to follow:

  1. Run listener_app.py.
  2. In a separate terminal instance, run sender_app.py.

Executing both will allow the interaction between the two, enabling listener_app.py to receive and process the requests as you expect.

Please try running both applications as mentioned above and let us know if you encounter any further issues or if there is anything more we can assist you with!

@tekumara
Copy link
Author

So I am running the sending app at the same time in a separate terminal:

❯ python -m src.demo.sender_app

======================================================================================
Panini service connected to NATS..
id: 160
name: sender_app__non_docker_env_172165__573154

NATS brokers:
*  nats://127.0.0.1:4222

JetStream enabled: False
======================================================================================

@artas728
Copy link
Collaborator

@tekumara, thank you for sharing the sender app logs. To clarify, when you're running sender_app in the other terminal, are you saying that listener_app is not receiving the expected request messages, as outlined in the README? Please confirm.

@tekumara
Copy link
Author

Yep that's right. I only get the output shown above from listener_app.

@artas728
Copy link
Collaborator

artas728 commented Oct 2, 2023

Tthere is a minor mistake in the code from README.md. Below the same code but fixed.

Python 3.10
panini==0.8.2
nats-py==2.2.0
nats-python==0.8.0

listener app:

from panini import app as panini_app

app = panini_app.App(
        service_name='listener_app',
        host='127.0.0.1',
        port=4222,
)

@app.listen("some.subject.for.request")
async def request_listener(msg):
    """ request endpoint """
    print(f"request {msg.data} from {msg.subject} has been processed")
    return {"success": True, "message": "request has been processed"}

@app.listen("some.subject.for.stream")
async def stream_listener(msg):
    """ stream endpoint """
    print(f"event {msg.data} from {msg.subject} has been processed")

if __name__ == "__main__":
    app.start()

sender app:

from panini import app as panini_app

app = panini_app.App(
    service_name='sender_app',
    host='127.0.0.1',
    port=4222,
)


@app.task(interval=1)
async def request_periodically():
    message = {"data": "request1234567890"}
    response = await app.request(
        subject="some.subject.for.request",
        message=message,
    )
    print(response)


@app.task(interval=1)
async def publish_periodically():
    message = {"data": "event1234567890"}
    await app.publish(
        subject="some.subject.for.stream",
        message=message,
    )

if __name__ == "__main__":
    app.start()

Let me know if it works for you

@tekumara
Copy link
Author

tekumara commented Oct 7, 2023

Hi @artas728 I figured it out, using the original code from the README. I have to start the listener app first. If I start the sender app first I never see any requests. Thanks for all your help!

@tekumara tekumara closed this as completed Oct 7, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants