标签: rabbitmq

确认然后拒绝 AMQP 消息的逻辑是什么?

我一直在使用 AMQP 的 RabbitMQ 客户端,我注意到,ack两者reject都只接受交付标签。ack如果您使用reject相同的交货标签会发生什么?RabbitMQ 不会出错,但我想知道这是否会抛出一个错误,表明传递标签已被“声明”。

AMQP 规范对此有什么规定吗?

amqp rabbitmq

0
推荐指数
1
解决办法
2322
查看次数

用于异步 REST 中状态更新的 RabbitMQ 临时队列

我正在设计一个 REST API,它根据此处详细介绍的异步设计工作。我正在使用 RabbitMQ 对初始请求进行排队 - 因此客户端发出调用,接收响应202 Accepted,并且作业由服务器排队。为了使客户端可以获得任务的状态更新(“完成百分比”),我们有一个辅助队列资源,就像链接的文章中一样。

鉴于每个任务都有自己的队列资源,似乎每个任务都需要一个临时 RabbitMQ 队列。我想知道这是否是一个明智的设计选择,尽管我看不到任何其他选择。这似乎不太高效,而且我对像这样创建大量临时队列的可能性感到不安,特别是因为我看不到一种方法来保证它们全部被清理(尽管 RabbitMQ 具有自动删除功能) 。在使用 RabbitMQ 之前,我使用 SQS 来实现此目的,并且对这方面可能发生的情况有痛苦的经验。

我注意到,对于那些使用 RPC 风格的 RabbitMQ 的人来说,类似类型的队列管理已经很熟悉了。然而,还有可能的替代方案吗?

rest asynchronous message-queue rabbitmq

0
推荐指数
1
解决办法
1901
查看次数

Rabbitmq - 多线程应用程序应该使用单通道还是多通道

我的应用程序有多个线程将消息发布到单个 RabbitMQ 集群。
阅读兔子文档:我阅读了以下内容:

对于使用多个线程/进程进行处理的应用程序,为每个线程/进程打开一个新通道而不是在它们之间共享通道是很常见的。

我明白,与其打开多个连接(昂贵),
不如打开多个通道。

但为什么不对所有线程使用单个通道呢?
与单个渠道相比,使用多个渠道有哪些好处?

channel rabbitmq

0
推荐指数
1
解决办法
809
查看次数

为什么Sender不向RabbitMQ中的队列发送数据?

我已经实现了 RabbitMQ,但卡在一个地方,似乎我的发送者无法向队列发送任何数据。

我的制作人课程:

@Service
public class MessageSender {

@Autowired
private AmqpTemplate template;

public void send(String text) {
    template.convertAndSend(text);
 }
}
Run Code Online (Sandbox Code Playgroud)

我的 spring 配置文件如下所示:

<rabbit:connection-factory id="connectionFactory"
                           addresses="${connectionFactory.addresses}" channel-cache-size="${connectionFactory.channel-cache-size}"
                           virtual-host="${connectionFactory.vhost}" username="${connectionFactory.user}"
                           password="${connectionFactory.password}" />

<rabbit:template id="amqpTemplate" connection-factory="connectionFactory" queue="myQueue" exchange="myExchange" routing-key="dummyKey"/>

<rabbit:queue name="myQueue" />

<rabbit:direct-exchange name="myExchange">
    <rabbit:bindings>
        <rabbit:binding queue="myQueue" />
    </rabbit:bindings>
</rabbit:direct-exchange>

<rabbit:listener-container connection-factory="connectionFactory">
    <rabbit:listener ref="messageHandler" method="onMessage" queue-names="myQueue" />
</rabbit:listener-container>

<rabbit:admin connection-factory="connectionFactory" />

<bean id="messageHandler" class="com.tm.email.sender.spring.MessageHandler" />
Run Code Online (Sandbox Code Playgroud)

我无法找出问题所在。

下面提到的事情完美地运作。我可以轻松地将消息推送到队列,然后我的发送者类工作得很好。

public class Send {
private final static String QUEUE_NAME = "myQueue";
public static void main(String[] …
Run Code Online (Sandbox Code Playgroud)

rabbitmq spring-amqp

0
推荐指数
1
解决办法
2305
查看次数

如何让 Bunny 使用 RabbitMQ 一次处理一条消息?

当我使用 Bunny 时,当我使用以下命令打开到包含 50,000 条消息的队列的连接时:

queue = channel.queue('test.queue', :durable => true)
queue.subscribe(:manual_ack => true) do ...
Run Code Online (Sandbox Code Playgroud)

RabbitMQ 立即将所有消息从 移动READYUNACKED,从而不会在 中留下任何消息READY

如果我尝试使用相同的代码启动另一个兔子,它现在没有任何可读取的内容READY

我错过了一些明显的东西吗?

ruby rabbitmq bunny

0
推荐指数
1
解决办法
264
查看次数

带有进度通知的长时间运行的后台任务

我有一个 ASP.NET 网站,其中包含许多长时间运行(5 分钟到 2 小时)的用户启动的任务。我希望每个用户都能够看到自己作业的进度,并且能够关闭浏览器并稍后返回。

当前的计划是在每个作业启动时将其存储在数据库中,并将消息发布到 RabbitMQ 队列,Windows 服务将接收该消息并开始处理该作业。

但是,我不确定将进度信息从服务传递回网络服务器的最佳方法?我看到两个选择:

  • 将进度信息存储在数据库中,并通过网络应用程序对其进行轮询
  • 在网络服务器中有一个 RabbitMQ 消费者,并让 Windows 服务将进度消息发布到该队列

我倾向于第二种选择,因为我真的不想通过定期轮询/写入进度信息来增加数据库的更多开销。然而,有很多关于使用 RabbitMQ(作为消费者)的警告- 因为我没有发送重要消息(如果进度消息没有被处理也没关系),我想知道这是否重要?这并不是困难(著名的遗言)。

这个选项听起来合理吗?还有更好的选择吗?

architecture asp.net windows-services rabbitmq long-running-processes

0
推荐指数
1
解决办法
1505
查看次数

Celery 与 Redis 对比 vs 单独 Redis

我无法理解使用 Celery 的优势是什么。我知道你可以将 Celery 与 Redis、RabbitMQ 等一起使用,但为什么我不直接获取这些消息队列服务的客户端,而不是将 Celery 放在它前面呢?

python java messaging rabbitmq celery

0
推荐指数
1
解决办法
1239
查看次数

用于批量插入的缓冲区数据

每次在我的网站上发出请求时,有关该事件的一些数据都会记录到数据库(Yandex ClickHouse)中。如果批量插入至少 1000 条记录,ClickHouse 的工作速度会显着加快。对于每个请求,我都想将数据发送到另一台计算机,该计算机将存储数据,然后当缓冲区达到一定大小(例如 1000)时将其刷新到数据库。我正在考虑使用 RabbitMQ 进行消息传递/缓冲,但我我不确定这是不是正确的工具。有什么建议么?

logging rabbitmq clickhouse

0
推荐指数
1
解决办法
2778
查看次数

Django celery 守护进程给出“supervisor FATAL 找不到命令”,但路径是正确的

概述:

我正在尝试将 celery 作为守护进程运行来执行发送电子邮件的任务。它在开发中运行良好,但在生产中却运行不佳。我现在有了我的网站,每个功能都工作正常(没有 django 错误),但由于守护进程未正确设置,任务无法完成,并且我在 ubuntu 16.04 中收到此错误:

project_celery FATAL can't find command '/home/my_user/myvenv/bin/celery'

安装的程序/硬件,以及我到目前为止所做的事情:

我在 VPS 上使用 Django 2.0.5、python 3.5、ubuntu 16.04、rabbitmq 和 celery。我使用 venv 来完成这一切。我也安装了主管,当我检查时它正在运行sudo service --status-all,因为它旁边有一个+。Erlang 也已安装,当我检查时top,rabbitmq 正在运行。使用sudo service rabbitmq-server status表明rabbitmq也处于活动状态。

最初,我按照celery 网站上的说明进行操作,但它们非常令人困惑,并且在测试/阅读/观看其他人的解决方案约 40 小时后我无法让它工作。感到非常恼怒和挫败,我选择了这里的方向来设置守护进程并希望我能到达某个地方,并且我已经走得更远,但我收到了上面的错误。

我通读了主管文档,检查了进程状态以尝试调试问题以及程序设置,但我迷失了,因为根据文档,据我所知,我的路径是正确的。

这是我的文件结构:

home/
    my_user/               # is a superuser
        portfolio-project/
            project/
                __init__.py
                celery.py
                settings.py     # this file is in here too
            app_1/
            app_2/
            ...
            ...
        logs/
            celery.log
        myvenv/
            bin/
                celery …
Run Code Online (Sandbox Code Playgroud)

django ubuntu rabbitmq celery supervisord

0
推荐指数
1
解决办法
2366
查看次数

在 docker 容器中运行 RabbitMQ

我对 RabbitMQ 还很陌生,我正在开发一个 POC 来运行在 docker 容器中使用 RabbitMQ 的 C# 解决方案。

我设法编写了 docker-compose.yml、dockerfile 并运行了 RabbitMQ。但是,我的解决方案无法访问 RabbitMQ 主机。我想我可能缺少一些配置,但我不知道是什么。

docker-compose.yml

version: '3.4'

services:
  rabbit-sender:
    image: rabbit-sender
    container_name: rabbit-sender
    build: 
        context: ../SenderRabitMQ
        dockerfile: debug.Dockerfile
    env_file: common.env
    networks:
      - rabbitPoc
    expose:
      - "80"

  rabbit-receiver:
    image: rabbit-receiver
    container_name: rabbit-receiver
    build: 
      context: ../ReceiveRabitMQ
      dockerfile: debug.Dockerfile
    env_file: common.env
    networks:
      - rabbitPoc
    expose:
      - "80"

  rabbitmq:
    image: rabbitmq:3.7.15
    hostname: rabbitmq
    build: 
      context: rabbit
      dockerfile: debug.Dockerfile
    ports:
      - "5672:5672"
      - "15672:15672"
    volumes:
      - "./enabled_plugins:/etc/rabbitmq/enabled_plugins"
Run Code Online (Sandbox Code Playgroud)

调试.Dockerfile

Install RabbitMQ
FROM ubuntu:14.04.1 …
Run Code Online (Sandbox Code Playgroud)

c# rabbitmq docker dockerfile docker-compose

0
推荐指数
1
解决办法
7377
查看次数