我想开发一个微服务结构的项目。我必须使用 php/laravel 和 nodejs/nestjs 我的微服务之间的最佳连接方法是什么。我读到了 RabbitMQ 和 NATS 消息传递以及 GRPC 哪个选项更适合微服务?为什么?提前致谢
我想编写一个在部署后运行的简单冒烟测试,以验证RabbitMQ凭证是否有效.检查rabbitmq用户名/密码/ vhost有效的最简单方法是什么?
编辑: 最好使用bash脚本进行检查.或者,使用Python脚本.
所以,这就是我所做的:
在这一步我没有错误.但是,当我尝试启用rabbitmq-management时,我在控制台中收到一些错误消息.我尝试启用它的方式是这样的:
C:\...\rabbitmq-server-3.5.6\sbin>rabbitmq-plugins.bat enable rabbitmq_management
Run Code Online (Sandbox Code Playgroud)
这导致:
将插件配置应用于rabbit @Jacobian ......失败了
为了补充这一点,我知道这个线程,但我不确定这个命令是什么意思SET HOMEDRIVE=C:.不过,我试过这样:
C:\...\rabbitmq-server-3.5.6\sbin> SET HOMEDRIVE=C:
C:\...\rabbitmq-server-3.5.6\sbin> rabbitmq-plugins.bat enable rabbitmq_management
Run Code Online (Sandbox Code Playgroud)
但我仍然得到相同的错误消息.谢谢!
编辑:
编辑
看起来像是RabbitMQ成了RubbishMQ.问题是我遵循非常标准和非常基本的步骤,RabbitMQ现在在Ubuntu机器上安装,并再次得到一个可怕的错误消息列表.这些是我遵循的步骤:
apt-get install pkg-config automake autoconf libsigc++-2.0-dev
git clone git://github.com/alanxz/rabbitmq-c.git
cd rabbitmq-c
# Enable and update the codegen git submodule
git submodule init
git submodule update
# Configure, compile and install
autoreconf -i && ./configure && make && sudo make install
rabbitmq-plugins enable rabbitmq_management
Run Code Online (Sandbox Code Playgroud)
当我运行最后一个命令时,我得到了大量的错误消息.其中我看到如"error_logger …
我想知道RabbitMQ如何将消息物理地存储在其RAM和磁盘中?
我知道RabbitMQ试图将消息保存在内存中(但我不知道消息是如何放入Ram的).但是当消息处于持久模式或代理具有内存压力时,消息可能会溢出到磁盘中.(但我不知道消息是如何存储在磁盘中的.)
我想知道关于这些的内部情况.不幸的是,其主页上的官方文档没有公开内部细节.
我应该阅读哪个文件?
我的supervisord.conf中的当前部分如下所示:
[program:rabbitmq] command =/usr/sbin/rabbitmq-server
当我试图用supervisord(supervisorctl stop rabbitmq)停止rabbitmq时,rabbitmq进程根本就没有关闭.rabbitmq文档还提到永远不要使用kill,而是使用rabbitmqctl stop.我猜测supervisord只会杀死进程 - 因此使用rabbitmq会导致糟糕的结果.我在supervisord中找不到任何选项来指定自定义停止命令.
你有什么建议?
我一直在与Django/Celery文档争论一段时间,需要一些帮助.
我希望能够使用django-celery运行Periodic Tasks.我已经在互联网(和文档)周围看到了几种不同的格式和模式,以了解如何使用Celery实现这一目标...
有人可以帮助创建,注册和执行django-celery定期任务的基本功能示例吗?特别是,我想知道是否应该编写一个扩展PeriodicTask类并注册它的任务,或者我是否应该使用@periodic_task装饰器,或者我是否应该使用@task装饰器然后为任务设置一个时间表执行.
我不介意这三种方式是否可行,但我希望看到一个至少有一种方法可行的例子.非常感谢您的帮助.
我成功使用RabbitMQ.但是,我有一个问题,如果我遇到队列中有大量消息的情况,那么消费者(Windows服务)会尝试全部获取它们然后只是保留它们但从不动作或确认它们.
当处于就绪状态的消息数量较少时,消费者处理吞吐量很好,就好像存在问题并且存在积压,那么它就太贪婪了.
有没有办法配置消费者在任何时候尝试并承担责任的最大消息数量?
我可以看到该RequestedChannelMax字段RabbitMQ.Client.ConnectionFactory是否正确设置限制此?
谢谢
我对这些高级并发范例很陌生,我已经开始使用scala RX绑定了.所以我试图理解RX与RabbitMQ或ZeroMQ等消息队列的区别?
他们似乎都使用订阅/发布范例.在某个地方,我看到一条关于RX在RabbitMQ上运行的推文.
有人可以解释RX和消息队列之间的差异吗?为什么我会选择一个而不是另一个?可以用一个替代另一个,还是互相排斥?它们在哪些区域重叠?
我有一个反应器从RabbitMQ代理获取消息并触发工作方法在进程池中处理这些消息,如下所示:
这是使用python实现的asyncio,loop.run_in_executor()和concurrent.futures.ProcessPoolExecutor.
现在我想使用SQLAlchemy访问worker方法中的数据库.大多数情况下,处理将是非常简单和快速的CRUD操作.
反应器在开始时每秒处理10-50条消息,因此不能为每个请求打开新的数据库连接.相反,我想在每个进程中维护一个持久连接.
我的问题是:我怎么能这样做?我可以将它们存储在全局变量中吗?SQA连接池是否会为我处理这个问题?当反应堆停止时如何清理?
[更新]
为什么选择带有进程池的模式?
当前实现使用不同的模式,其中每个使用者在其自己的线程中运行.不知何故,这不是很好.已经有大约200个消费者在他们自己的线程中运行,并且系统正在快速增长.为了更好地扩展,我们的想法是分离关注点并在I/O循环中使用消息并将处理委托给池.当然,整个系统的性能主要是I/O绑定.但是,处理大型结果集时CPU是一个问题.
另一个原因是"易用性".虽然消息的连接处理和消耗是异步实现的,但是worker中的代码可以是同步且简单的.
很快,很明显,通过工作者内部的持久网络连接访问远程系统是一个问题.这就是CommunicationChannels的用途:在worker中,我可以通过这些通道向消息总线发出请求.
我目前的一个想法是以类似的方式处理数据库访问:将语句通过队列传递到事件循环,然后将它们发送到数据库.但是,我不知道如何使用SQLAlchemy执行此操作.入口点在哪里?对象需要pickled在它们通过队列时传递.如何从SQA查询中获取此类对象?与数据库的通信必须异步工作,以免阻塞事件循环.我可以使用例如aiomysql作为SQA的数据库驱动程序吗?
python sqlalchemy rabbitmq python-asyncio python-multiprocessing
我按照官方文档中提到的方式安装了erlang和rabbitmq.但是,当我这样做的时候
C:\ Program Files\RabbitMQ Server\rabbitmq_server-3.7.0\sbin> rabbitmqctl add_user XXXXXX YYYYYYY
它给了我以下错误......
错误:无法在节点'rabbit @ C001741998'上执行操作.请参阅下面的诊断信息和建议.
最常见的原因是:
除了下面的诊断信息:
试图联系:[rabbit @ C001741998]
兔@ C001741998:
连接到C001741998上的epmd(端口4369)
epmd报告节点'rabbit'使用端口25672进行节点间和CLI工具流量
TCP连接成功但Erlang分发失败
身份验证失败(被远程节点拒绝),请检查Erlang cookie
当前节点详情:
节点名称:rabbitmqcli49 @ C001741998
有效用户的主目录:C:\ Users\XYZ
Erlang cookie hash:QJlwBuAgrn8gN00mjqQYOw ==
我将erlang cookie从我的用户主文件夹复制到C:\ Windows文件夹.所以,他们都有相同的cookie.它还在不断地把错误扔给我.不确定应该如何解决.任何帮助?
rabbitmq ×10
python ×2
celery ×1
django ×1
erlang ×1
grpc ×1
nats.io ×1
sqlalchemy ×1
supervisord ×1
zeromq ×1