我正在尝试访问 Ubuntu 12.04 服务器上的 RabbitMQ 管理插件。我有一个反向代理设置,可将端口 15627 路由到“/messages”,并且我已使用 Rackspace 验证端口 15627 已打开。然而,当我导航到 mydomain.com/messages 时,我看到的只是一个空白页面 - 根本没有登录页面。浏览器选项卡正确显示“RabbitMQ Management”,服务器上正在运行RabbitMQ服务。我使用的是 RabbitMQ 版本 3.4.2。
我的反向代理:
AllowEncodedSlashes On
ProxyPass /messages http://localhost:15672/
ProxyPassReverse /messages http://localhost:15672/
Run Code Online (Sandbox Code Playgroud)
以下是 RabbitMQ 的插件列表:
[e*] amqp_client 3.4.2
[e*] mochiweb 2.7.0-rmq3.4.2-git680dba8
[E*] rabbitmq_management 3.4.2
[e*] rabbitmq_management_agent 3.4.2
[e*] rabbitmq_web_dispatch 3.4.2
[e*] webmachine 1.10.3-rmq3.4.2-gite9359c7
Run Code Online (Sandbox Code Playgroud)
有人在代理上设置rabbitmq时遇到问题吗?感谢您提供的任何帮助,谢谢!
编辑1
我忘了提及,如果我导航到 my-server-ip-address:15672,我可以访问 RabbitMQ 管理插件,所以我知道它在端口 15672 上可用。
编辑2
更新了代理信息
来自 RabbitMQ文档
使用任务队列的优点之一是能够轻松并行工作。如果我们正在积压工作,我们可以添加更多工人,这样就可以轻松扩展。
我只是不清楚这里的工作人员是什么,是消息被推送到的工作队列还是消费者接收器代码或某些内部rabbitmq守护进程?谁能解释一下这一点。谢谢
我想从 java 客户端使用rabbitmq-consistency-hash-exchange 的功能,或者最好使用 spring 抽象 spring-amqp。不幸的是,我未能找到一个解释 java 用法并引用要包含的 jar 依赖项的示例,请提出建议。
我使用rabbitMQ 来将任务发送给在运行时创建的工作人员(消费者)。目前,每次创建新任务时,都会创建一个新的工作线程。问题是这样的: - 用户创建一个任务
-创建一个worker,然后将任务发送到队列上供worker处理
-worker开始处理队列(worker基本上休眠了一段时间)
-另一个用户创建任务
-创建新的工作人员并将任务发送到队列上
-新的工作人员不处理新任务,同时绝对不执行任何操作,并且新任务由第一个工作人员在完成第一个任务后处理
我检查了rabbitmq的管理部分,有两个消费者绑定到队列,但其中一个似乎完成了所有工作,而另一个只是等待。
这是工人的代码: public class Worker extends Thread {
private final static String QUEUE_NAME = "Tasks";
private final static String QUEUE_COMPL = "Completed";
public static int id = 0;
private static final String EXCHANGE_NAME = "logs";
public int compteur;
String identifier;
public Worker() {
Worker.id++;
compteur = id;
}
public void run() {
try {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
channel.queueDeclare(QUEUE_NAME, false, false, …
Run Code Online (Sandbox Code Playgroud) 我有多个键值类型的对象,我需要将它们发送到 RabbitMQ,因此转发会消耗它们。因此,在浏览完RabbitMQ链接之后。它仅告诉您如何发布简单的纯文本消息。谁能告诉我如何在 RabbitMQ go lang 中发布和使用地图对象?
m := make(map[string]string)
m["col1"] = "004999010640000"
m["col2"] = "awadwaw"
m["col3"] = "13"
err = ch.Publish(
"EventCaptureData-Exchange", // exchange
q.Name + "Key", // routing key
true, // mandatory
false, // immediate
amqp.Publishing{
ContentType: "?????",
Body: ????,
})
Run Code Online (Sandbox Code Playgroud) 我正在寻求解决消息传递服务器和队列的 FIFO 性质所遇到的问题。在某些情况下,我希望根据消息传递顺序以外的标准将队列中的消息分发到消费者池。理想情况下,这将防止用户占用系统中的共享资源。以这个过于简化的场景为例:
鉴于每个用户的垃圾箱中可能有大量消息,我们有哪些选项可以允许并发处理每个垃圾箱而不考虑排队时间?在我看来,有几个明显的解决方案:
在我们的例子中,创建一个单独的队列并管理每个用户的消费者确实不切实际。这是可以做到的,但我认为如果合理的话我真的更喜欢第二种选择。我们正在使用 RabbitMQ,但如果有更适合此任务的技术,则不一定与其绑定。
我正在考虑使用 Rabbit 的消息优先级来帮助随机发送的想法。通过随机为消息分配 1 到 10 之间的优先级,这应该有助于分发消息。这种方法的问题是,如果队列永远不会完全清空,那么具有最低优先级的消息可能会永远卡在队列中。我以为我可以在消息上使用 TTL,然后以升级的优先级重新排队消息,但我在文档中注意到了这一点:
应过期的消息仍然只会从队列头部过期。这意味着与普通队列不同,即使每个队列的 TTL 也可能导致过期的低优先级消息卡在未过期的高优先级消息后面。这些消息永远不会被传递,但它们会出现在队列统计信息中。
我担心我可能会因为这种方法而陷入兔子洞。我想知道其他人是如何解决这个问题的。任何有关创意路由、消息传递模式或任何替代解决方案的反馈将不胜感激。
我想在 java SpringBoot 中实现 RabbitMq(AMQP) 消息传递,但是当我收到消息时,它说消息无法反序列化,因为我没有找到我应该接收的对象的类,即使我有该类int 类路径。
RabbitMqListener.java:
@EnableRabbit
@Component
public class RabbitMqListener {
Logger logger = Logger.getLogger(RabbitMqListener.class);
@RabbitListener(queues = "queue2")
public void processQueue1(Product message) {
logger.info("Received from queue 2: " + message);
}
}
Run Code Online (Sandbox Code Playgroud)
兔子配置.java:
@Configuration
public class RabbitConfiguration {
Logger logger = Logger.getLogger(RabbitConfiguration.class);
@Bean
public ConnectionFactory connectionFactory() {
CachingConnectionFactory connectionFactory =
new CachingConnectionFactory("localhost");
return connectionFactory;
}
@Bean
public AmqpAdmin amqpAdmin() {
return new RabbitAdmin(connectionFactory());
}
@Bean
public MessageConverter jsonMessageConverter(){
return new JsonMessageConverter();
}
@Bean
public RabbitTemplate rabbitTemplate() { …
Run Code Online (Sandbox Code Playgroud) 我们创建了一个具有两个节点(rabbit 和rabbit1)的 RabbitMQ 集群。我们有 4 个队列,按照http://www.rabbitmq.com/clustering.html和http://www.rabbitmq.com/ha.html配置为高可用队列
在集群之前,我们曾经使用下面的代码片段连接到节点。
var factory = new ConnectionFactory(){ HostName = _rabbitMQ_Hostname, UserName = _rabbitMQ_Username, Password = _rabbitMQ_Password};
using (var connection = factory.CreateConnection())
using (var channel = connection.CreateModel())
{
channel.QueueDeclare(queue: _autoCancellationPNS_QueueName,
durable: true,
exclusive: false,
autoDelete: false,
arguments: null);
string message = appointmentId.ToString();
var body = Encoding.UTF8.GetBytes(message);
IBasicProperties properties = channel.CreateBasicProperties();
properties.DeliveryMode = 2;
channel.BasicPublish(exchange: _rabbitMQ_Exchange,
routingKey: _autoCancellationPNS_RoutingKey,
basicProperties: properties,
body: body);
returnMessage.ShortMessage = "Added to queue";
returnMessage.LongMessage = "Added to queue";
logger.Debug("|Added …
Run Code Online (Sandbox Code Playgroud) 我正在设计一个系统,它将使用 RabbitMQ 在应用程序之间进行请求/响应。
我习惯于使用 REST API,并且从这个背景出发,我一直在思考如何在执行请求/响应时构造消息。
我需要构建它来处理几种情况:
我计划将有效负载 JSON 格式化。我正在考虑使用某种类似于 HTTP 的响应代码(也许使用相同的代码?)并将响应代码设置为消息上的属性/标头。
对于获取/查询,我的想法是在有效负载对象中拥有一个查询属性。
但这让我想到,我可能认为这太像 REST API,并且可能有一些更好、更成熟的方法来做到这一点。
在进行设置时,我一直在阅读《RabbitMQ in Action》一书,但我没有看到其中提到这一点。我的 google-fu 也让我失败了,没有提供任何结果。
有经验的人愿意分享他们如何构建信息吗?
我有一个 RabbitMQ 的特殊场景,需要动态创建队列并绑定到交换器,这些队列也是动态创建的(不是由我创建的)。此创建和绑定由新的 SignalR 订阅触发。
这个问题: https: //github.com/MassTransit/MassTransit/issues/398是关于它的,但我仍然不知道答案。
公共交通似乎在移动中创造事物方面不太灵活。我怎样才能实现这个目标?如果我停止总线并重新创建所有队列和绑定以及新的队列和绑定,然后再次启动总线会怎样?
提前致谢。