标签: rabbitmq

哪个选项更适合微服务?GRPC 或消息代理(例如 RabbitMQ)

我想开发一个微服务结构的项目。我必须使用 php/laravel 和 nodejs/nestjs 我的微服务之间的最佳连接方法是什么。我读到了 RabbitMQ 和 NATS 消息传递以及 GRPC 哪个选项更适合微服务?为什么?提前致谢

rabbitmq messagebroker microservices grpc nats.io

26
推荐指数
2
解决办法
2万
查看次数

验证rabbitmq凭据是否有效

我想编写一个在部署后运行的简单冒烟测试,以验证RabbitMQ凭证是否有效.检查rabbitmq用户名/密码/ vhost有效的最简单方法是什么?

编辑: 最好使用bash脚本进行检查.或者,使用Python脚本.

python rabbitmq

25
推荐指数
4
解决办法
2万
查看次数

无法在Windows上启用rabbitmq-management插件

所以,这就是我所做的:

  1. 在我的Windows x64位机器上安装了Erlang
  2. 已安装RabbitMQ
  3. 开始RabbitMQ服务

在这一步我没有错误.但是,当我尝试启用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

25
推荐指数
6
解决办法
4万
查看次数

RabbitMQ如何实际存储消息?

我想知道RabbitMQ如何将消息物理地存储在其RAM和磁盘中?

我知道RabbitMQ试图将消息保存在内存中(但我不知道消息是如何放入Ram的).但是当消息处于持久模式或代理具有内存压力时,消息可能会溢出到磁盘中.(但我不知道消息是如何存储在磁盘中的.)

我想知道关于这些的内部情况.不幸的是,其主页上的官方文档没有公开内部细节.

我应该阅读哪个文件?

rabbitmq

25
推荐指数
1
解决办法
1万
查看次数

如何用supervisord正确管理rabbitmq

我的supervisord.conf中的当前部分如下所示:

[program:rabbitmq] command =/usr/sbin/rabbitmq-server

当我试图用supervisord(supervisorctl stop rabbitmq)停止rabbitmq时,rabbitmq进程根本就没有关闭.rabbitmq文档还提到永远不要使用kill,而是使用rabbitmqctl stop.我猜测supervisord只会杀死进程 - 因此使用rabbitmq会导致糟糕的结果.我在supervisord中找不到任何选项来指定自定义停止命令.

你有什么建议?

rabbitmq supervisord

24
推荐指数
2
解决办法
1万
查看次数

Django和Celery的例子:周期性任务

我一直在与Django/Celery文档争论一段时间,需要一些帮助.

我希望能够使用django-celery运行Periodic Tasks.我已经在互联网(和文档)周围看到了几种不同的格式和模式,以了解如何使用Celery实现这一目标...

有人可以帮助创建,注册和执行django-celery定期任务的基本功能示例吗?特别是,我想知道是否应该编写一个扩展PeriodicTask类并注册它的任务,或者我是否应该使用@periodic_task装饰器,或者我是否应该使用@task装饰器然后为任务设置一个时间表执行.

我不介意这三种方式是否可行,但我希望看到一个至少有一种方法可行的例子.非常感谢您的帮助.

django rabbitmq celery django-celery

24
推荐指数
1
解决办法
2万
查看次数

RabbitMQ如何限制消费者

我成功使用RabbitMQ.但是,我有一个问题,如果我遇到队列中有大量消息的情况,那么消费者(Windows服务)会尝试全部获取它们然后只是保留它们但从不动作或确认它们.

当处于就绪状态的消息数量较少时,消费者处理吞吐量很好,就好像存在问题并且存在积压,那么它就太贪婪了.

有没有办法配置消费者在任何时候尝试并承担责任的最大消息数量?

我可以看到该RequestedChannelMax字段RabbitMQ.Client.ConnectionFactory是否正确设置限制此?

谢谢

rabbitmq

24
推荐指数
1
解决办法
2万
查看次数

RX vs消息队列如rabbitmq或zeromq?

我对这些高级并发范例很陌生,我已经开始使用scala RX绑定了.所以我试图理解RX与RabbitMQ或ZeroMQ等消息队列的区别?

他们似乎都使用订阅/发布范例.在某个地方,我看到一条关于RX在RabbitMQ上运行的推文.

有人可以解释RX和消息队列之间的差异吗?为什么我会选择一个而不是另一个?可以用一个替代另一个,还是互相排斥?它们在哪些区域重叠?

rabbitmq zeromq reactive-programming system.reactive

24
推荐指数
2
解决办法
9810
查看次数

如何在ProcessPool中处理SQLAlchemy连接?

我有一个反应器从RabbitMQ代理获取消息并触发工作方法在进程池中处理这些消息,如下所示:

反应堆

这是使用python实现的asyncio,loop.run_in_executor()concurrent.futures.ProcessPoolExecutor.

现在我想使用SQLAlchemy访问worker方法中的数据库.大多数情况下,处理将是非常简单和快速的CRUD操作.

反应器在开始时每秒处理10-50条消息,因此不能为每个请求打开新的数据库连接.相反,我想在每个进程中维护一个持久连接.

我的问题是:我怎么能这样做?我可以将它们存储在全局变量中吗?SQA连接池是否会为我处理这个问题?当反应堆停止时如何清理?

[更新]

  • 数据库是带有InnoDB的MySQL.

为什么选择带有进程池的模式?

当前实现使用不同的模式,其中每个使用者在其自己的线程中运行.不知何故,这不是很好.已经有大约200个消费者在他们自己的线程中运行,并且系统正在快速增长.为了更好地扩展,我们的想法是分离关注点并在I/O循环中使用消息并将处理委托给池.当然,整个系统的性能主要是I/O绑定.但是,处理大型结果集时CPU是一个问题.

另一个原因是"易用性".虽然消息的连接处理和消耗是异步实现的,但是worker中的代码可以是同步且简单的.

很快,很明显,通过工作者内部的持久网络连接访问远程系统是一个问题.这就是CommunicationChannels的用途:在worker中,我可以通过这些通道向消息总线发出请求.

我目前的一个想法是以类似的方式处理数据库访问:将语句通过队列传递到事件循环,然后将它们发送到数据库.但是,我不知道如何使用SQLAlchemy执行此操作.入口点在哪里?对象需要pickled在它们通过队列时传递.如何从SQA查询中获取此类对象?与数据库的通信必须异步工作,以免阻塞事件循环.我可以使用例如aiomysql作为SQA的数据库驱动程序吗?

python sqlalchemy rabbitmq python-asyncio python-multiprocessing

24
推荐指数
1
解决办法
2108
查看次数

身份验证失败(被远程节点拒绝),请检查Erlang cookie

我按照官方文档中提到的方式安装了erlang和rabbitmq.但是,当我这样做的时候

C:\ Program Files\RabbitMQ Server\rabbitmq_server-3.7.0\sbin> rabbitmqctl add_user XXXXXX YYYYYYY

它给了我以下错误......


错误:无法在节点'rabbit @ C001741998'上执行操作.请参阅下面的诊断信息和建议.

最常见的原因是:

  • 目标节点无法访问(例如,由于主机名解析,TCP连接或防火墙问题)
  • CLI工具无法通过服务器进行身份验证(例如,由于CLI工具的Erlang cookie与服务器不匹配)
  • 目标节点未运行

除了下面的诊断信息:

诊断

试图联系:[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.它还在不断地把错误扔给我.不确定应该如何解决.任何帮助?

erlang rabbitmq

24
推荐指数
4
解决办法
2万
查看次数