按照此处说明的指示,我已经设置了证书颁发机构并rabbitmq.config使用适当的字段创建了该证书.但是,当我尝试连接到RabbitMQ服务器时
openssl s_client -connect 127.0.0.1:5671 -tls1
Run Code Online (Sandbox Code Playgroud)
我在标准输出中得到以下内容:
CONNECTED(00000003)
write:errno=104
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 0 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1
Cipher : 0000
Session-ID:
Session-ID-ctx:
Master-Key:
Key-Arg : None
PSK identity: None
PSK identity hint: None
SRP username: None
Start Time: 1449612785 …Run Code Online (Sandbox Code Playgroud) 在RabbitMQ中,
如果我想在群集环境中镜像队列,请使用以下命令:
rabbitmqctl set_policy ha-all "" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
Run Code Online (Sandbox Code Playgroud)
此命令将策略应用于虚拟主机的所有队列"\".
如果我必须将特定虚拟主机的策略应用于"foo",我使用:
rabbitmqctl set_policy -p "foo" ha-all "" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
Run Code Online (Sandbox Code Playgroud)
题 :
有没有办法在集群环境中的所有虚拟主机上应用策略以进行队列镜像?
rabbitmqctl 正确报告数千个排队任务:
$ sudo rabbitmqctl -q list_queues name messages messages_ready messages_unacknowledged
default 13142 13126 16
Run Code Online (Sandbox Code Playgroud)
然而芹菜报道:
>>> len(app.control.inspect().active()['celery@default'])
4
>>> len(app.control.inspect().scheduled()['celery@default'])
1
>>> len(app.control.inspect().reserved()['celery@default'])
16
>>> len(app.control.inspect().revoked()['celery@default'])
0
Run Code Online (Sandbox Code Playgroud)
正确数量(数千)的任务似乎出现了app.control.inspect().stats()['celery@default']['total'],但我真的想知道python 中未完成的排队任务的正确数量,而且active()似乎只报告了大约16个左右 - 也许有一个限制?
如果没有使用特权子进程调用rabbitmqctl,我如何从python中获取完整的排队任务数,最好是通过celery(顺便说一下这个服务器当前正在使用Celery 3.1.8)
我在Rabbitmq服务器中使用自签名证书,并且该代理已通过SSL端口成功启动。我现在正在尝试续订/使用新的SSL证书,SSL密钥和信任库,但由于我的应用程序应连续运行,因此我不想重新启动正在运行的Rabbitmq服务器。我在网上检查了解决方案,以在运行时刷新/重新加载erlang / rabbitmq来读取/重新加载这些新的SSL证书,但我偶然发现了一些建议使用-的链接rabbitmqctl eval "ssl:stop(), ssl:start()." to reload certs。
该命令运行良好,并且无需重启rabbitmq即可刷新新的SSL证书,但是使用方/连接已重置,因此我的应用程序不再能够从队列中读取消息。
您能帮我解决这个问题吗?我想重新加载新的SSL证书而无需重新启动我的Rabbitmq或应用程序,并且Rabbitmq必须能够在不重置任何连接的情况下与我的应用程序正常工作。如果不是,请就如何重新建立连接提出建议,以使我的应用程序按预期运行。
ssl-certificate rabbitmq spring-amqp rabbitmqctl spring-rabbitmq
尝试使用rabbit@localhost 设置rabbitmq,但是:
c:\Program Files\RabbitMQ Server\rabbitmq_server-3.7.18\sbin>rabbitmqctl status
Error: unable to perform an operation on node 'rabbit@localhost'. Please see diagnostics information and suggestions below.
Run Code Online (Sandbox Code Playgroud)
Erlang + Rabbitmq + Win7。我已经启动了 Rabbitmq 服务,它可以工作,但是节点是使用随机名称自动创建的
attempted to contact: [rabbit@localhost]
rabbit@localhost:
* connected to epmd (port 4369) on localhost
* epmd reports: node 'rabbit' not running at all
no other nodes on localhost
* suggestion: start the node
Current node details:
* node name: 'rabbitmqcli-10012-rabbit@localhost'
* effective user's home directory: C:\Users\andrey
* Erlang cookie hash: LdQNaRpK/HR5vh8yRc6A2w==
Run Code Online (Sandbox Code Playgroud) 我在docker-library/healthcheck看到了 RabbitMQ 的 docker healthcheck 示例。
我想对我的 Kubernetes 部署应用类似的机制,以等待 Rabbit 部署准备就绪。我正在对 MongoDB 做类似的事情,使用一个通过一些 ping 命令忙等待 mongo 的容器。
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-1
spec:
replicas: 1
selector:
matchLabels:
app: app-1
template:
metadata:
labels:
app: app-1
spec:
initContainers:
- name: wait-for-mongo
image: gcr.io/app-1/tools/mongo-ping
containers:
- name: app-1-service
image: gcr.io/app-1/service
...
Run Code Online (Sandbox Code Playgroud)
然而,当我尝试构建这样的 init 容器时,我找不到任何关于如何从集群外部查询兔子健康状况的解决方案。
我在CentOS 5.x服务器上安装了RabbitMQ,用于在我的程序之间传递消息.我rabbitmqadmin按照https://www.rabbitmq.com/management-cli.html上的说明进行了安装,并且过去在我的服务器上使用过它.
据我所知,看起来这个特定的服务器配置错误.在尝试获取有关如何解决此问题的更多信息时,我的网络搜索失败了.
错误:
[root@server ~]# python26 /usr/local/bin/rabbitmqadmin list nodes
*** Could not connect: [Errno -2] Name or service not known
[root@server ~]#
Run Code Online (Sandbox Code Playgroud)
我尝试了几种不同的rabbitmqadmin命令,它们给出了相同的结果.如果我在没有额外参数的情况下运行命令,则会显示正常的帮助对话框.我有这个设置,并在其他几个服务器上工作.
根本问题是什么?如果没有,无论如何要获得更多细节,比如详细?
更新:
我只是试图检查rabbitmq的版本,它也产生了一个错误:
[root@server ~]# rabbitmqctl status
Status of node rabbit@server ...
Error: unable to connect to node rabbit@server: nodedown
DIAGNOSTICS
===========
attempted to contact: [rabbit@server]
rabbit@server:
* connected to epmd (port 4369) on server
* epmd reports node 'rabbit' running on port 25672
* TCP connection succeeded but Erlang …Run Code Online (Sandbox Code Playgroud) 在 Rabbit MQ 中使用集群时,我计划使用竞争订阅者模式。
Producer : 1
Exchange : 1 direct
Queue : 1
Consumers : n (multiple) listening to the same queue.
Run Code Online (Sandbox Code Playgroud)
现在,如果我有一个包含 3 个节点的集群,那么消费者从其中获取消息的队列将只有一个(无论集群中的节点数量如何)。如果我必须扩大上述限制,您认为我应该拥有多个集群吗?
请指教。
第二个相关问题,聚类如何有助于可扩展性?
正如RabbitMQ文档中提到的那样,tcp连接的成本很高.因此,为此引入了渠道概念.现在我遇到了这个例子.在main()它每次发布消息时都会创建连接.
conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/").它不应该全局声明一次,并且如果连接像singleton对象那样关闭,应该有故障转移机制.如果amqp.Dial是线程安全的,我想它应该是
编辑问题:
我正在以下列方式处理连接错误.我在一个频道上听,并在出错时创建一个新的连接.但是当我杀死现有连接并尝试发布消息时.我收到以下错误.
错误:
2016/03/30 19:20:08 Failed to open a channel: write tcp 172.16.5.48:51085->172.16.0.20:5672: use of closed network connection
exit status 1
7:25 PM
Run Code Online (Sandbox Code Playgroud)
代码:
func main() {
Conn, err := amqp.Dial("amqp://guest:guest@172.16.0.20:5672/")
failOnError(err, "Failed to connect to RabbitMQ")
context := &appContext{queueName: "QUEUENAME",exchangeName: "ExchangeName",exchangeType: "direct",routingKey: "RoutingKey",conn: Conn}
c := make(chan *amqp.Error)
go func() {
error := <-c
if(error != nil){
Conn, err = amqp.Dial("amqp://guest:guest@172.16.0.20:5672/")
failOnError(err, "Failed to connect to RabbitMQ")
Conn.NotifyClose(c)
} …Run Code Online (Sandbox Code Playgroud) 我有一个 Kubernetes 环境,其中有一个rabbitmq servirve,它部署了 2 个rabbitmq pod。
我需要在rabbitmq上安装一个插件,(延迟消息插件)但我不喜欢“手动”方式,所以如果pod被删除,我必须再次安装插件。
我想知道实现此目标的推荐方法是什么。
仅供参考:手动方法是将文件复制到插件文件夹中,然后启动以下命令:
rabbitmq-plugins enable rabbitmq_delayed_message_exchange
Run Code Online (Sandbox Code Playgroud) rabbitmq ×10
rabbitmqctl ×10
kubernetes ×2
celery ×1
docker ×1
go ×1
python ×1
spring-amqp ×1
ssl ×1