我已经安装了一个 RabbitMQ docker 镜像并让它运行起来。我的 docker 管理控制台也在端口 8080 上运行。
我用 docker 运行 docker run -d --hostname my-rabbit --name some-rabbit rabbitmq:3
我正在尝试运行以下节点代码;
var amqp = require('amqplib/callback_api');
var connection = amqp.connect('amqp://localhost:5672',function(err,conn){
console.log(conn); });
Run Code Online (Sandbox Code Playgroud)
但是, conn 始终是未定义的。
我试过了;
amqp://localhost:5672
amqp://localhost:15672
amqp://localhost
amqp://localhost:8080
Run Code Online (Sandbox Code Playgroud)
但它们都不起作用。
我的 rabbitmq 经理说 amqp 正在监听 5672。
除了默认来宾帐户之外,我没有任何其他帐户。
我没有在管理模式下运行 Visual Studio 代码。
我得到的错误是;
错误:在 Socket.endWhileOpening (C:\Users\sgrieger\Documents\Development\rabbitmq\node_modules\amqplib\lib\connection.js:259:17) 处的emitNone (events.js:111:20) 打开握手期间,套接字突然关闭) 在 Socket.emit (events.js:208:7) at endReadableNT (_stream_readable.js:1064:12) at _combinedTickCallback (internal/process/next_tick.js:138:11) at process._tickCallback (internal/process/next_tick) .js:180:9)
我是使用 c# 的rabbitmq 新手。我们正在尝试为 epex spot 创建 API,它在传输标签协议中使用 AMQP,并为此使用 Rabbitmq。
我可以使用提供的凭据连接到 epex spot 的服务器。
ConnectionFactory factory = new RabbitMQ.Client.ConnectionFactory();
能够创建频道
using (IConnection conn = factory.CreateConnection())
{
using (IModel channel = conn.CreateModel())
{
Run Code Online (Sandbox Code Playgroud)
但是当我尝试 DeclareExchange 或 DeclareQueue 时,我收到错误说明:
AMQP 操作被中断:AMQP close-reason,由 Peer 发起,code=403,text="ACCESS_REFUSED - access to exchange 'M7.broadcastQueue.username' in vhost 'app' denied for user 'username'", classId=60 , 方法 ID=40
如果我尝试联系 epexspot 并请求许可,他们会说我们拥有所有必要的许可。你们能帮我解决这个问题吗,或者如果有人以前遇到过类似的问题?
我通常在 Django 中使用 celery 并在 Django 中运行共享任务。
但是对于特定情况,我想在不运行 Django 或 celerybeat 的情况下手动将任务队列添加到 rabbitmq。
有没有简单的python脚本或shell cmd来做到这一点?
是否有任何解决方案可以在不同的消息类型之间共享一个队列?
我知道主题交换,但它使用不同的队列。
我将 Rabbitmq 与微服务架构一起使用。我在许多用例中使用主题和直接交换,并且效果很好。但是我有一个用例,我必须从数据库中删除一条记录。当我删除记录时,需要调用其他几个服务并维护/删除引用的记录。我可以通过简单地通过直接交换调用这些服务来实现这一点,但我读到它更喜欢编排而不是编排。这意味着我应该实现发布/订阅模式(rabbitmq 中的扇出)。我的问题是,如果我在分布式系统中使用发布/订阅模式,如何确保只有一个服务实例使用发布的消息?
我有一个带有 Celery 背景和周期性任务的 Django 项目。我在一年前开始工作进程,并且定期任务运行良好。但是,我刚刚发现调用异步函数主服务器代码不起作用,apply_async()
/delay()
导致函数的同步执行就像不使用它们一样。我该如何解决问题?我的 Celery 版本是 4.2。这是我的芹菜设置文件:
import os
from celery import Celery
from django.conf import settings
broker_url = 'amqp://<user>:<password>@localhost:5672/{project}'
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'MyProject.settings')
app = Celery('<project>', broker=broker_url)
app.config_from_object('django.conf:settings')
app.conf.update (
CELERY_TASK_SERIALIZER='json',
CELERY_ACCEPT_CONTENT=['json'],
CELERY_RESULT_SERIALIZER='json',
CELERYD_HIJACK_ROOT_LOGGER=False,
BROKER_URL=broker_url,
CELERY_RESULT_BACKEND='djcelery.backends.database.DatabaseBackend',
CELERY_ALWAYS_EAGER=True,
)
Run Code Online (Sandbox Code Playgroud)
这是我的测试代码:
from general.celery import app
from time import sleep
@app.task
def fun():
for i in range(5):
print('Sleeping')
sleep(2)
print('Awake')
def test():
print('Begin')
fun.apply_async(countdown=10)
print('End')
Run Code Online (Sandbox Code Playgroud)
它导致立即输出:
Begin
Sleeping
...
Run Code Online (Sandbox Code Playgroud)
我还检查了芹菜的inspect
:
from celery.task.control import inspect
print(inspect().stats())
Run Code Online (Sandbox Code Playgroud)
它描述了以下状态:
{ …
Run Code Online (Sandbox Code Playgroud) 我正在尝试实现对多租户 Spring Boot 应用程序的支持,其中每个租户应用程序都通过 RabbitMq 将数据发送到 Spring Boot 应用程序。每个租户都连接到自己的 RabbitMq 虚拟主机。这可以如下图所示
这个问题已经被问过很多次了,比如
解决方案似乎是为每个虚拟主机创建多个 connectionFactory bean。这些是完全硬编码的解决方案。我想要一些更易于管理的东西。
就我而言,每个虚拟主机的交换名称和绑定密钥都是相同的。到目前为止,spring boot 应用程序能够连接到一个虚拟主机。
我希望我的 Spring Boot 应用程序能够处理所有这些虚拟主机以及在 spring 配置文件中完成的所需凭据,而不是为每个连接工厂创建一个单独的 bean。
有没有办法在 spring 配置文件中实现对多个虚拟主机的支持,或者如果可能的话,还有其他更好的方法来解决我和许多其他开发人员面临的这个问题吗?
谢谢
我有一个简单的问题,但我在互联网上找不到证据。
我连接到RabbitMQ
带MassTransit
的,我只是想知道,如果消费者致谢和出版商证实是活跃在默认情况下,如果连接已使用的经纪人发MassTansit
?
如果默认处于活动状态:我在哪里可以找到关于此的证据?
如果默认情况下未激活:如何启用这些功能?
我在一个项目中使用 RabbitMQ 并针对它运行我的集成测试。由于测试需要相互独立,我想在每次测试之前重置 RabbitMQ 实例,目前通过重新启动(自动创建的)RabbitMQ docker 容器来解决这个问题。但是,这非常慢(对于集成测试)。
我从这个答案中知道可以使用以下命令重置rabbitmq-instance rabbitmqctl stop && rabbitmqctl reset && rabbitmqctl start
- 但是在docker-image的情况下,停止信号会杀死主容器进程(即rabbitmq-server),这反过来又会导致dockerd杀死完整的容器。
到目前为止,我找到的唯一解决方案是运行 management-api-plugin,迭代所有队列、交换、策略等,并通过它删除它们 - 这反过来也需要一段时间并且需要 management-plugin 运行。
是否可以通过 AMQP、其他一些 API 端点或运行命令以编程方式重置正在运行的 rabbitmq 节点,而无需先停止它?
我正在使用Rabbitmq 3.7.17
并且我需要重命名已经包含一些消息的现有队列。有没有一种简单的方法来重命名队列?
rabbitmq ×10
c# ×2
celery ×2
django ×2
docker ×2
python ×2
spring-boot ×2
amqp ×1
asynchronous ×1
java ×1
masstransit ×1
node.js ×1
queue ×1
redis ×1
spring-amqp ×1