通过Spring集成和RabbitMQ实现的高可用性AMQP-问题
我所做的:通过Spring集成和RabbitMQ实现的高可用性AMQP-问题,rabbitmq,spring-amqp,spring-rabbit,Rabbitmq,Spring Amqp,Spring Rabbit,我所做的: [ {rabbit, [ {tcp_listeners, [5673]}, {collect_statistics_interval, 10000}, {heartbeat,30}, {cluster_partition_handling, pause_minority}, {cluster_nodes, {[ 'rabbit@master', 'rabbit2@master'], disc}} ]
[
{rabbit, [ {tcp_listeners, [5673]},
{collect_statistics_interval, 10000},
{heartbeat,30},
{cluster_partition_handling, pause_minority},
{cluster_nodes, {[ 'rabbit@master',
'rabbit2@master'],
disc}} ] },
{rabbitmq_management, [ {http_log_dir,"/tmp/rabbit-mgmt"},{listener, [{port, 15673}]} ] },
{rabbitmq_management_agent, [ {force_fine_statistics, true} ] }
].
#!/bin/bash
echo "*** Second RabbitMQ Server is setting up ***"
export RABBITMQ_HOSTNAME=rabbit2@master
export RABBITMQ_NODE_PORT=5673
export RABBITMQ_NODENAME=rabbit2@master
export RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15673}]"
/DEV_TOOLS/rabbitmq_server-3.4.2_2/sbin/rabbitmq-server &
echo "*** Second RabbitMQ Server is set up succesfully. ***"
sleep 5
echo "*** Second RabbitMQ Server' s status : ***"
/DEV_TOOLS/rabbitmq_server-3.4.2_2/sbin/rabbitmqctl status
sleep 5
echo "*** Second RabbitMQ Server is being added to cluster... ***"
/DEV_TOOLS/rabbitmq_server-3.4.2_2/sbin/rabbitmqctl -n rabbit2@master stop_app
/DEV_TOOLS/rabbitmq_server-3.4.2_2/sbin/rabbitmqctl -n rabbit2@master join_cluster rabbit@master
/DEV_TOOLS/rabbitmq_server-3.4.2_2/sbin/rabbitmqctl -n rabbit2@master start_app
/DEV_TOOLS/rabbitmq_server-3.4.2/sbin/rabbitmqctl -n rabbit@master set_policy ha-all "^ha\." '{"ha-mode":"all"}'
echo "*** Second RabbitMQ Server is added to cluster successfully... ***"
sleep 5
echo "*** Second RabbitMQ Server' s cluster status : ***"
/DEV_TOOLS/rabbitmq_server-3.4.2_2/sbin/rabbitmqctl cluster_status
我正在使用RabbitMQ消息代理,它在我的spring micro服务中支持AMQP标准。其主要目的是在rabbitMQ服务器(不幸)关闭期间防止消息丢失。因此,我计划提供高度可用的AMQP支持的消息通道
我尝试设置两个RabbitMQ服务器,并按照下面的链接设置RabbitMQ服务器
第一个RabbitMQ服务器的配置文件(RabbitMQ.config)如下所示。它应该放在../rabbitmq_server-version/etc/rabbitmq下/
[
{rabbit, [ {tcp_listeners, [5672]},
{collect_statistics_interval, 10000},
{heartbeat,30},
{cluster_partition_handling, pause_minority},
{cluster_nodes, {[ 'rabbit@master',
'rabbit2@master'],
disc}} ] },
{rabbitmq_management, [ {http_log_dir,"/tmp/rabbit-mgmt"},{listener, [{port, 15672}]} ] },
{rabbitmq_management_agent, [ {force_fine_statistics, true} ] }
].
第二个RabbitMQ服务器的RabbitMQ.config文件:
[
{rabbit, [ {tcp_listeners, [5673]},
{collect_statistics_interval, 10000},
{heartbeat,30},
{cluster_partition_handling, pause_minority},
{cluster_nodes, {[ 'rabbit@master',
'rabbit2@master'],
disc}} ] },
{rabbitmq_management, [ {http_log_dir,"/tmp/rabbit-mgmt"},{listener, [{port, 15673}]} ] },
{rabbitmq_management_agent, [ {force_fine_statistics, true} ] }
].
#!/bin/bash
echo "*** Second RabbitMQ Server is setting up ***"
export RABBITMQ_HOSTNAME=rabbit2@master
export RABBITMQ_NODE_PORT=5673
export RABBITMQ_NODENAME=rabbit2@master
export RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15673}]"
/DEV_TOOLS/rabbitmq_server-3.4.2_2/sbin/rabbitmq-server &
echo "*** Second RabbitMQ Server is set up succesfully. ***"
sleep 5
echo "*** Second RabbitMQ Server' s status : ***"
/DEV_TOOLS/rabbitmq_server-3.4.2_2/sbin/rabbitmqctl status
sleep 5
echo "*** Second RabbitMQ Server is being added to cluster... ***"
/DEV_TOOLS/rabbitmq_server-3.4.2_2/sbin/rabbitmqctl -n rabbit2@master stop_app
/DEV_TOOLS/rabbitmq_server-3.4.2_2/sbin/rabbitmqctl -n rabbit2@master join_cluster rabbit@master
/DEV_TOOLS/rabbitmq_server-3.4.2_2/sbin/rabbitmqctl -n rabbit2@master start_app
/DEV_TOOLS/rabbitmq_server-3.4.2/sbin/rabbitmqctl -n rabbit@master set_policy ha-all "^ha\." '{"ha-mode":"all"}'
echo "*** Second RabbitMQ Server is added to cluster successfully... ***"
sleep 5
echo "*** Second RabbitMQ Server' s cluster status : ***"
/DEV_TOOLS/rabbitmq_server-3.4.2_2/sbin/rabbitmqctl cluster_status
第一个RabbitMQ服务器的bash脚本示例如下所示。另外,请查看RabbitMQ集群文档以了解其他配置步骤
#!/bin/bash
echo "*** First RabbitMQ Server is setting up ***"
export RABBITMQ_HOSTNAME=rabbit@master
export RABBITMQ_NODE_PORT=5672
export RABBITMQ_NODENAME=rabbit@master
export RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15672}]"
/DEV_TOOLS/rabbitmq_server-3.4.2/sbin/rabbitmq-server &
echo "*** Second RabbitMQ Server is set up succesfully. ***"
sleep 5
echo "*** First RabbitMQ Server' s status : ***"
/DEV_TOOLS/rabbitmq_server-3.4.2/sbin/rabbitmqctl status
第二个RabbitMQ服务器的bash脚本示例如下:
[
{rabbit, [ {tcp_listeners, [5673]},
{collect_statistics_interval, 10000},
{heartbeat,30},
{cluster_partition_handling, pause_minority},
{cluster_nodes, {[ 'rabbit@master',
'rabbit2@master'],
disc}} ] },
{rabbitmq_management, [ {http_log_dir,"/tmp/rabbit-mgmt"},{listener, [{port, 15673}]} ] },
{rabbitmq_management_agent, [ {force_fine_statistics, true} ] }
].
#!/bin/bash
echo "*** Second RabbitMQ Server is setting up ***"
export RABBITMQ_HOSTNAME=rabbit2@master
export RABBITMQ_NODE_PORT=5673
export RABBITMQ_NODENAME=rabbit2@master
export RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15673}]"
/DEV_TOOLS/rabbitmq_server-3.4.2_2/sbin/rabbitmq-server &
echo "*** Second RabbitMQ Server is set up succesfully. ***"
sleep 5
echo "*** Second RabbitMQ Server' s status : ***"
/DEV_TOOLS/rabbitmq_server-3.4.2_2/sbin/rabbitmqctl status
sleep 5
echo "*** Second RabbitMQ Server is being added to cluster... ***"
/DEV_TOOLS/rabbitmq_server-3.4.2_2/sbin/rabbitmqctl -n rabbit2@master stop_app
/DEV_TOOLS/rabbitmq_server-3.4.2_2/sbin/rabbitmqctl -n rabbit2@master join_cluster rabbit@master
/DEV_TOOLS/rabbitmq_server-3.4.2_2/sbin/rabbitmqctl -n rabbit2@master start_app
/DEV_TOOLS/rabbitmq_server-3.4.2/sbin/rabbitmqctl -n rabbit@master set_policy ha-all "^ha\." '{"ha-mode":"all"}'
echo "*** Second RabbitMQ Server is added to cluster successfully... ***"
sleep 5
echo "*** Second RabbitMQ Server' s cluster status : ***"
/DEV_TOOLS/rabbitmq_server-3.4.2_2/sbin/rabbitmqctl cluster_status
问题是什么:
[
{rabbit, [ {tcp_listeners, [5673]},
{collect_statistics_interval, 10000},
{heartbeat,30},
{cluster_partition_handling, pause_minority},
{cluster_nodes, {[ 'rabbit@master',
'rabbit2@master'],
disc}} ] },
{rabbitmq_management, [ {http_log_dir,"/tmp/rabbit-mgmt"},{listener, [{port, 15673}]} ] },
{rabbitmq_management_agent, [ {force_fine_statistics, true} ] }
].
#!/bin/bash
echo "*** Second RabbitMQ Server is setting up ***"
export RABBITMQ_HOSTNAME=rabbit2@master
export RABBITMQ_NODE_PORT=5673
export RABBITMQ_NODENAME=rabbit2@master
export RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15673}]"
/DEV_TOOLS/rabbitmq_server-3.4.2_2/sbin/rabbitmq-server &
echo "*** Second RabbitMQ Server is set up succesfully. ***"
sleep 5
echo "*** Second RabbitMQ Server' s status : ***"
/DEV_TOOLS/rabbitmq_server-3.4.2_2/sbin/rabbitmqctl status
sleep 5
echo "*** Second RabbitMQ Server is being added to cluster... ***"
/DEV_TOOLS/rabbitmq_server-3.4.2_2/sbin/rabbitmqctl -n rabbit2@master stop_app
/DEV_TOOLS/rabbitmq_server-3.4.2_2/sbin/rabbitmqctl -n rabbit2@master join_cluster rabbit@master
/DEV_TOOLS/rabbitmq_server-3.4.2_2/sbin/rabbitmqctl -n rabbit2@master start_app
/DEV_TOOLS/rabbitmq_server-3.4.2/sbin/rabbitmqctl -n rabbit@master set_policy ha-all "^ha\." '{"ha-mode":"all"}'
echo "*** Second RabbitMQ Server is added to cluster successfully... ***"
sleep 5
echo "*** Second RabbitMQ Server' s cluster status : ***"
/DEV_TOOLS/rabbitmq_server-3.4.2_2/sbin/rabbitmqctl cluster_status
我可以看到两个RabbitMQ服务器正在同步运行
当我停止第一个节点时,第二个节点正在工作
sbin/rabbitmqctl stop_app
但是当我关闭第一个RabbitMQ服务器时,第二个节点也会关闭
sbin/rabbitmqctl stop
但是结果应该是,
如果第一个消息传递节点和第一个RabbitMQ服务器关闭
意外地,第二个消息传递节点和第二个RabbitMQ服务器将
继续处理订单消息,以防止潜在的消息丢失和
使用高可用性可以防止服务中断问题
AMQP支持的通道
请帮我解决这个问题。谢谢。这个问题实际上与您引用的spring项目无关。如果将纯rabbitmq问题提交给rabbitmq用户google组,你可能会更走运——这就是rabbitmq工程师们常去的地方。这个问题实际上与你引用的spring项目毫无关系。通过将纯rabbitmq问题引导到rabbitmq用户google组,您可能会有更好的运气——这就是rabbitmq工程师经常出现的地方。