数字海洋应用程序:通过zmq在两个组件之间进行通信

vecaoik1  于 2021-09-08  发布在  Java
关注(0)|答案(0)|浏览(370)

总结
我尝试在数字海洋上构建应用程序。我选择了它的服务/产品“app”。我的应用程序由3个组件组成:
服务:flask应用程序+zmq客户端(请求套接字)
工作者:zmq服务器(代表套接字)
工作程序:zmq客户端(请求套接字)
使用的语言是python。术语“服务”和“工作者”在数字海洋应用程序规范的上下文中。
预期行为
我尝试将请求从客户端组件发送到服务器组件(在收到响应之后)。
我预计这种情况:
服务器已启动,正在等待请求
客户端已启动并发送请求
服务器接收请求
服务器发送响应
客户端接收响应
真实行为
它在步骤3中中断。这意味着服务器从未收到请求。客户端和服务器已启动,没有任何异常(通过日志确认)
我试过的
以不同的顺序启动/重新启动组件
不同的端口号
重命名组件(删除有问题的字符)
将zmq req套接字连接到本地主机
按名称将zmq req套接字连接到rep组件(代码示例)
在app spec yaml文件中定义内部端口。这只可能是为了服务。
worker zmq客户端

import time
import zmq
import logging

logging.basicConfig(level=logging.DEBUG)

try:
    zmq_context = zmq.Context()
    socket = zmq_context.socket(zmq.REQ)
    socket.connect("tcp://ZMQServer:55555")

    for i in range(5):
        logging.debug(f"[CLIENT] Sending request {i}")
        socket.send_string("test")
        time.sleep(1)
        logging.debug(f"[CLIENT] Waiting for a response {i}")
        message = socket.recv_string()
        logging.debug("[CLIENT] Response received")
except Exception as e:
    logging.error(e)

辅助zmq服务器

import time
import zmq
import logging

logging.basicConfig(level=logging.DEBUG)

context = zmq.Context()
socket = context.socket(zmq.REP)
socket.bind("tcp://*:55555")

logging.debug("[SERVER] Starting ZMQ SERVER")

while True:
    logging.debug("[SERVER] Waiting for request")
    message = socket.recv_string()
    time.sleep(1)
    logging.debug("[SERVER] Sending response")
    socket.send_string("Perfect! It is working.")

应用程序规范

name: basic-app
region: fra
services:
- environment_slug: python
  github:
    branch: main
    deploy_on_push: true
    repo: ...
  http_port: 8080
  instance_count: 1
  instance_size_slug: basic-xs
  name: c-3
  routes:
  - path: /
  run_command: gunicorn --worker-tmp-dir /dev/shm --config gunicorn_config.py app:app
  source_dir: /
  internal_ports:
    - 55555
workers:
- environment_slug: python
  github:
    branch: main
    deploy_on_push: true
    repo: ...
  instance_count: 1
  instance_size_slug: basic-xs
  name: ZMQServer
  run_command: python zmq_server.py
  source_dir: /
- environment_slug: python
  github:
    branch: main
    deploy_on_push: true
    repo: ...
  instance_count: 1
  instance_size_slug: basic-xs
  name: ZMQClient
  run_command: python client.py
  source_dir: /

谢谢你的回答

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题