我的 RabbitMQ 集群有一个奇怪的问题。我正在运行一个带有 RabbitMQ 3.6.5 的 3 节点集群。当我模拟其中一个节点的连接丢失(“我从后面拉出电缆”)时,我在日志文件中看到发生了网络分区。然而,它接着说:
cluster_partition_handling "pause_minority" unrecognised, assuming 'ignore'
最初,我将设置设置为“pause-minority”而不是 pause_minority 它在文档中的说法。然而,改变它并没有帮助。我尝试了不同的变体并四处寻找示例,但找不到任何东西。
{cluster_partition_handling, pause_minority},
{cluster_partition_handling, "pause_minority"},
{cluster_partition_handling,pause_minority},
这些都没有奏效。我一直收到同样的错误。
但是,如果我重新启动节点,它将正常工作。队列获得一个新的主节点,当节点返回时,它会与其他节点同步。
为什么 RabbitMQ 不能识别我的设置,我该如何解决?
我有交换和队列。生产者不需要消费确认,但在某些情况下,由于缺乏其他数据,消费者可能无法在当前时刻处理消息。因此,我想将这些消息返回到队列末尾。这该怎么做?还是在我拒绝消息时自动完成?
流动:
所以存在消息排序问题,在一般情况下,我按顺序接收消息,因为大多数组件正确传递消息。我想解决潜在的情况,当 Message1 的 Producer 由于负载过重或其他原因无法立即将消息进行交换时。在这种情况下,Message2 将首先被消费,但数据库中将没有足够的信息来处理它。我希望此消息返回到队列,但请确保此 Message2 将转到队列的尾部。如果它会继续下去,如果我只使用一个队列,我就会陷入无限循环。
附带问题是,是否可以跟踪消费者尝试处理消息但返回消息的次数。如果有可能像我之前描述的那样将消息放到队列的尾部,但是由于某种原因 Message1 的生产者死了,并且没有 Message1,我想让 Message2 在重试几次或一段时间后死掉。
我正在创建一个带有 -v 选项的 rabbitmq 容器来添加一个卷,奇怪的是,如果我不添加 --hostname 容器将无法获取卷的信息,例如:
我创建了一个这样的卷:
docker volume create --name rabbit
Run Code Online (Sandbox Code Playgroud)
后来我验证该卷已创建
docker volume ls
Run Code Online (Sandbox Code Playgroud)
然后我像这样创建容器:
docker run --name rabbitprueba -P -p 55555:15672 -d -v rabbit:/var/lib/rabbitmq rabbitmq:3.6.10-management
Run Code Online (Sandbox Code Playgroud)
我输入 localhost:55555 并输入用户名和密码,然后创建一个简单的队列,返回我的机器并停止并移除容器:
docker stop rabbitprueba
docker rm rabbitprueba
Run Code Online (Sandbox Code Playgroud)
当我运行相同的命令时:
docker run --name rabbitprueba -P -p 55555:15672 -d -v rabbit:/var/lib/rabbitmq rabbitmq:3.6.10-management
Run Code Online (Sandbox Code Playgroud)
我创建的队列消失了,但如果我重复相同的步骤(停止容器并删除它)并将 --hostname 添加到命令中,队列不会被删除:
docker run --hostname rabbitprueba --name rabbitprueba -P -p 55555:15672 -d -v rabbit:/var/lib/rabbitmq rabbitmq:3.6.10-management
Run Code Online (Sandbox Code Playgroud)
为什么会这样?,我做错了什么吗?,
我正在做类似的事情
from(rabbitmq:pollingQueue?prefetchSize=1&concurrentConsumer=10)
.process(pollingRequestStatus) // check status of the request, if not ready, requeue = true
.Choice
.when(requeue == true) // request not ready
.to(rabbitmq:pollingQueue)//back to the same queue
.endChoice
.otherwise
.to(proceedToSomethingElse)
.endChoice.end;
Run Code Online (Sandbox Code Playgroud)
当重新排队发生时,消息会重复,这是将消息发回同一队列时的预期行为吗?
我也按照建议尝试了以下类似的东西,但它不起作用,该消息似乎只是被消耗掉了,不会重新排队
from(rabbitmq:pollingQueue? prefetchSize=1&concurrentConsumer=10)
.onException(NotReadyException.class)
.handled(true)
.setHeader(RabbitMQConstants.REQUEUE, constant(true))
.end()
.process(pollingRequestStatus) // check status of the request, if not ready, throw NotReadyEception
.to(proceedToSomethingElse);
Run Code Online (Sandbox Code Playgroud)
我尝试过的另外两种方法至少不会创建重复项,
1.) 在 NotReadyExeption 上,将消息发送回 pollingQueue
from(rabbitmq:pollingQueue? prefetchSize=1&concurrentConsumer=10)
.onException(NotReadyException.class)
.to(rabbitmq:pollingQueue)
//.delay(constant(8000)) //not sure why it throws error if i set delay
.end
.process(pollingRequestStatus); // check status …Run Code Online (Sandbox Code Playgroud) 我正在将 spring-boot 与 rabbitMQ 一起使用,我想知道是否可以使用 RabbitTemplate 使用每条消息 TTL。到目前为止我有:
@Autowired
private RabbitTemplate rabbit;
public void produce() {
rabbit.convertAndSend("My.Queue", routingKey, message);
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试将rabbitmq 集成到本机应用程序上
参考这个库:https : //www.npmjs.com/package/react-native-rabbitmq
我尝试使用适当的配置属性创建一个 Connection 对象。但是当我试图检查let connection = new Connection(config);我收到以下结果时:
Connection {rabbitmqconnection: Object, callbacks: Object, connected: false}在连接对象中。如您所见,它给出了connected: false
我已经提到在节点端创建 rabbit mq 服务器:https : //www.rabbitmq.com/tutorials/tutorial-one-javascript.html来创建一个正常工作的节点 rabbit mq 服务器。现在我需要在客户端接收消息
我确信配置属性和rabbitmq 服务器运行正常,因为使用相同的我可以从单独的节点服务器连接到rabbit mq。试图在这两个添加记录器connection.on('error')和中connection.on('connected'),但没有得到任何日志
无法理解问题出在哪里。有人可以帮助或建议一个更好的图书馆吗?需要在 react-native 上集成 RabbitMQ
const config = {
host: '192.0.0.1', //dummy values
port: 5672,
username: 'username',
password: 'password',
virtualhost: 'vhost'
};
const connection = new Connection(config);
console.log('connection config changed');
console.log(connection);
connection.on('error', (event) => {
console.log('error');
console.log(event);
}); …Run Code Online (Sandbox Code Playgroud) 有人可以解释为什么会这样吗?
我创建了一个标头交换并将其绑定到三个具有不同参数的队列,如下所示:
然后我尝试发布一条消息,其中任何格式为 pdf 的队列都会收到它,如下所示:
但是交换似乎无法将其路由到正确的队列,因为我收到以下消息:
由于我找不到和我有同样问题的人,这可能是我在这里做错了
请注意,例如,如果我发送x-match:all,format: pdf和type: report,队列test-queue-A正常获取
$rabbitmqctl list_queues
Timeout: 60.0 seconds ...
Listing queues for vhost / ...
privateTransactionQ 2
amq.gen-o9dl3Zj7HxS50gkTC2xbBQ 0
task_queue 0
Run Code Online (Sandbox Code Playgroud)
rabbitmqctl 的输出如下所示。我无法弄清楚每列的含义。我怎样才能看到每一列的含义?
如何从 CLI获取 Rabbitmq 中现有用户的密码?我通过 CLI 命令“ sudo rabbitmqctl list_users ”获得了用户名,输出如下:
列出用户 ... 来宾 [管理员] openstack []
我想知道“ openstack ”用户密码。
我一直在关注这个URL,在 Spring 启动应用程序中使用 Jasypt 加密我的数据库密码。从那里,我找到了我试图遵循第一种和第二种方法的这个 Github网址。但是当我尝试运行我的应用程序时,我在应用程序启动时遇到异常。
java.lang.NoClassDefFoundError: org/springframework/boot/context/properties/bind/PlaceholdersResolver
at java.lang.Class.getDeclaredMethods0(Native Method) ~[na:1.8.0_181]
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) ~[na:1.8.0_181]
at java.lang.Class.getDeclaredMethods(Class.java:1975) ~[na:1.8.0_181]
at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:613) ~[spring-core-4.3.8.RELEASE.jar!/:4.3.8.RELEASE]
at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:524) ~[spring-core-4.3.8.RELEASE.jar!/:4.3.8.RELEASE]
at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:510) ~[spring-core-4.3.8.RELEASE.jar!/:4.3.8.RELEASE]
at org.springframework.util.ReflectionUtils.getUniqueDeclaredMethods(ReflectionUtils.java:570) ~[spring-core-4.3.8.RELEASE.jar!/:4.3.8.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getTypeForFactoryMethod(AbstractAutowireCapableBeanFactory.java:697) ~[spring-beans-4.3.8.RELEASE.jar!/:4.3.8.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineTargetType(AbstractAutowireCapableBeanFactory.java:640) ~[spring-beans-4.3.8.RELEASE.jar!/:4.3.8.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:609) ~[spring-beans-4.3.8.RELEASE.jar!/:4.3.8.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1484) ~[spring-beans-4.3.8.RELEASE.jar!/:4.3.8.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doGetBeanNamesForType(DefaultListableBeanFactory.java:425) ~[spring-beans-4.3.8.RELEASE.jar!/:4.3.8.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:395) ~[spring-beans-4.3.8.RELEASE.jar!/:4.3.8.RELEASE]
at org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration$BeanPostProcessorsRegistrar.registerSyntheticBeanIfMissing(EmbeddedServletContainerAutoConfiguration.java:148) ~[spring-boot-autoconfigure-1.5.3.RELEASE.jar!/:1.5.3.RELEASE]
at org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration$BeanPostProcessorsRegistrar.registerBeanDefinitions(EmbeddedServletContainerAutoConfiguration.java:137) ~[spring-boot-autoconfigure-1.5.3.RELEASE.jar!/:1.5.3.RELEASE]
at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsFromRegistrars(ConfigurationClassBeanDefinitionReader.java:354) ~[spring-context-4.3.8.RELEASE.jar!/:4.3.8.RELEASE]
at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:143) ~[spring-context-4.3.8.RELEASE.jar!/:4.3.8.RELEASE]
at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:116) ~[spring-context-4.3.8.RELEASE.jar!/:4.3.8.RELEASE]
at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:320) ~[spring-context-4.3.8.RELEASE.jar!/:4.3.8.RELEASE]
at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:228) ~[spring-context-4.3.8.RELEASE.jar!/:4.3.8.RELEASE]
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:270) ~[spring-context-4.3.8.RELEASE.jar!/:4.3.8.RELEASE]
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:93) ~[spring-context-4.3.8.RELEASE.jar!/:4.3.8.RELEASE]
at …Run Code Online (Sandbox Code Playgroud) rabbitmq ×10
amqp ×2
spring ×2
spring-boot ×2
apache-camel ×1
docker ×1
duplicates ×1
jasypt ×1
java ×1
node-amqplib ×1
openstack ×1
react-native ×1