这是我运行 main 时遇到的错误。我不太明白为什么第 44 行有问题:channel.basicConsume(Q,true,consumer); 我的目标是尝试将收到的消息存储到可以在其他文件中使用的变量中。
The error is: Exception in thread "main" java.io.IOException
at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:105)
at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:101)
at com.rabbitmq.client.impl.ChannelN.basicConsume(ChannelN.java:1255)
at com.rabbitmq.client.impl.recovery.AutorecoveringChannel.basicConsume(AutorecoveringChannel.java:471)
at com.rabbitmq.client.impl.recovery.AutorecoveringChannel.basicConsume(AutorecoveringChannel.java:461)
at com.rabbitmq.client.impl.recovery.AutorecoveringChannel.basicConsume(AutorecoveringChannel.java:456)
at Recv.recv(Recv.java:44)
at mainLaptop.main(mainLaptop.java:11)
Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=404, reply-text=NOT_FOUND - no queue 'Leonardo' in vhost '/', class-id=60, method-id=20)
at com.rabbitmq.utility.ValueOrException.getValue(ValueOrException.java:66)
at com.rabbitmq.utility.BlockingValueOrException.uninterruptibleGetValue(BlockingValueOrException.java:32)
at com.rabbitmq.client.impl.AMQChannel$BlockingRpcContinuation.getReply(AMQChannel.java:366)
at com.rabbitmq.client.impl.ChannelN.basicConsume(ChannelN.java:1253)
... 5 more
Run Code Online (Sandbox Code Playgroud)
这是我的 Recv 文件代码
public class Recv
{
public static String recv(String ip, String Q) throws Exception
{
ConnectionFactory factory = new …Run Code Online (Sandbox Code Playgroud) 我有一个服务 AAA,每分钟向 RabbitMQ 交换发布 10 到 5 万条消息。.NET Core 服务 BBB 订阅一个队列(所有消息都路由到该队列),并为每条消息调用另一个通过 Internet 的 HTTP 服务 CCC。问题是 CCC 非常不可靠,每天有几次它会完全关闭一两分钟,每周至少有一次它会关闭一个小时。
我无法控制 AAA 或 CCC。如何使用 RabbitMQ 路由功能可靠地传递所有消息?
unreliable-connection rabbitmq reliable-message-delivery polly retry-logic
以下属性之间的主要区别是什么:
1)spring.rabbitmq.listener.direct.prefetch= # 单个请求中要处理的消息数。它应该大于或等于事务大小(如果使用)。
2)spring.rabbitmq.listener.simple.prefetch= # 单个请求中要处理的消息数。它应该大于或等于事务大小(如果使用)。
我们为rabbit MQ中的用户获得了[管理员][监控][Policymaker][管理][模仿者][无]权限。
在rabbit的UI中,我需要创建一个只需要对队列进行读取访问(通过UI)的用户,但不需要创建新队列/使用交换器。我该怎么做?
我有一个微服务架构,其中包含 ASP.Net Core 应用程序和 RabbitMq 作为微服务之间的事件总线。
我还想支持多租户。
因此,我在 中定义了以下依赖项注入服务,Startup.cs以便根据用户的租户 ID 在每个请求上打开与数据库的连接。
services.AddScoped<IDocumentSession>(ds =>
{
var store = ds.GetRequiredService<IDocumentStore>();
var httpContextAccessor = ds.GetRequiredService<IHttpContextAccessor>();
var tenant = httpContextAccessor?.HttpContext?.User?.Claims.FirstOrDefault(c => c.Type == "tid")?.Value;
return tenant != null ? store.OpenSession(tenant) : store.OpenSession();
});
Run Code Online (Sandbox Code Playgroud)
问题是当服务处理事件总线消息(如 UserUpdatedEvent)时。
在这种情况下,当它尝试打开 Db 连接时,它显然没有来自 http 上下文的用户信息。
在注入作用域服务并使用 RabbitMq 处理事件时,如何发送/访问相应用户的租户 ID?
或者改写我的问题:执行依赖项注入代码时,有什么方法可以访问 RabbitMQ 消息(例如其标头)?
events dependency-injection rabbitmq multi-tenant asp.net-core
我刚刚使用 Raspbian Stretch 9.9 在 RaspberryPi 上全新安装了 RabbitMQ,我想使用该rabbitmq-diagnostics命令来检查状态/ping 和其他监控信息,但它说找不到该命令。我不知道它是否与 RabbitMQ 捆绑在一起,如果我需要做某事或者我是否需要安装插件,但实际上没有相关文档,所以我假设它只是像 RabbitMQ 一样附带rabbitmqctl,但我有不知道为什么它不是一个命令。
我已经重新启动了我的 RaspberryPi 几次,其他命令也能正常工作。我在网上进行了大量搜索,除了官方文档页面之外,我似乎找不到任何相关信息;
https://www.rabbitmq.com/rabbitmq-diagnostics.8.html
任何人的任何帮助都会很棒。
我试图通过拉取图像然后使用 docker 运行它来启动rabbitmq ui
\n\ndocker run --name rabbit-p -p 15672:15672 -p 5672:5672 rabbitmq:latest
我什至尝试使用 docker compose。下面是我的 docker-compose.yaml 文件
\n\nversion: \'3\'\nservices:\n messaging:\n image: "messaging-producer"\n ports: \n - "7878:9876"\n rabbitmq:\n image: "rabbitmq:latest"\n ports: \n - "15762:15762"\n - "5672:5672"\nRun Code Online (Sandbox Code Playgroud)\n\n在这两种情况下,它都会显示Server startup complete,但是当我尝试点击 \n 时,http://localhost:15672/它会说This page isn\xe2\x80\x99t working
当我第一次运行该命令时,它工作得很好,但之后它就停止工作了。
\n\n以下是日志 -
\n\n Starting RabbitMQ 3.7.16 on Erlang 22.0.7\n Copyright (C) 2007-2019 Pivotal Software, Inc.\n Licensed under the MPL. See https://www.rabbitmq.com/\n\n ## ##\n ## …Run Code Online (Sandbox Code Playgroud) 我正在尝试让 RabbitMQ 服务器正常工作。在本教程中,本地主机连接不是问题。但是每当我尝试通过网络执行相同的操作时,我都无法让应用程序连接到代理。
发送:
var factory = new ConnectionFactory() { };
factory.HostName = "192.168.1.52";
factory.Port = 5672;
factory.UserName = "guest";
factory.Password = "guest";
factory.VirtualHost = "/";
using (var connection = factory.CreateConnection())
using (var channel = connection.CreateModel())
{
channel.QueueDeclare(queue: "hello",
durable: false,
exclusive: false,
autoDelete: false,
arguments: null);
string message = "Hello World!";
var body = Encoding.UTF8.GetBytes(message);
channel.BasicPublish(exchange: "",
routingKey: "hello",
basicProperties: null,
body: body);
Console.WriteLine(" [x] Sent {0}", message);
}
Console.WriteLine(" Press [enter] to exit.");
Console.ReadLine();
Run Code Online (Sandbox Code Playgroud)
RabbitMQ 实例运行在另一台 PC 上,IP …
我尝试使用brew 在我的Mac 上安装amqp php 扩展。
环境: MacOS Catalina 10.15.6,Homebrew 2.5.0,PHP 7.4.10,rabbitmq 3.8.8,rabbitmq-c 0.10.0
执行后我收到以下消息:pecl install amqp
checking for pkg-config... /usr/local/bin/pkg-config
checking for amqp using pkg-config... configure: error: librabbitmq not found
ERROR: `/private/tmp/pear/temp/amqp/configure --with-php-config=/usr/local/opt/php/bin/php-config --with-librabbitmq-dir' failed
Run Code Online (Sandbox Code Playgroud)
任何想法如何解决这个问题。
使用 MassTransit 库发布消息时是否可以指定超时值。当消息代理出现故障时如何处理场景。现在看来 Publish 调用无限期地等待。如果能控制这些行为就好了。我们应该依赖取消令牌吗?超时实现可能会更好。
rabbitmq ×10
c# ×2
asp.net-core ×1
docker ×1
events ×1
homebrew ×1
java ×1
masstransit ×1
multi-tenant ×1
networking ×1
pecl ×1
php ×1
polly ×1
publish ×1
que ×1
raspberry-pi ×1
raspbian ×1
readonly ×1
retry-logic ×1
rmq ×1
spring-boot ×1
timeout ×1