Java连接haproxy管控的rabbitmq集群问题
第一、成功的搭建了haproxy+rabbitmq集群,确认集群肯定没问题的。
第二、3个集群节点中两个ram和一个disc。
第三、目前java程序的写法是往第一个ram节点发送消息,再从第二个ram节点接收消息,disc节点只做同步不做操作。
想请问一下,java程序能否连接haproxy来发送消息到rabbitmq里,发送机制是轮训发送到两个ram节点,接收机制也是轮训从两个ram节点接收,disc节点只做同步不做操作,这种实现在java程序里怎么写?
ProducerCluster.java文件代码如下:
package com.shihuan.rabbitmq.server;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.shihuan.rabbitmq.common.QueueClusterInfo;
public class ProducerCluster {
public static void main(String[] args) {
//创建连接工厂
ConnectionFactory factory = new ConnectionFactory();
//设置RabbitMQ相关信息
factory.setHost("192.168.80.128");
factory.setUsername(rabbitmq机器的rabbitmq远程管理用户);
factory.setPassword(rabbitmq机器的rabbitmq远程管理用户的密码);
factory.setPort(5670);
factory.setVirtualHost(rabbitmq机器的rabbitmq的vhost);
//创建一个新的连接
Connection connection;
try {
connection = factory.newConnection();
//创建一个通道
Channel channel = connection.createChannel();
//声明一个队列
channel.queueDeclare(QueueClusterInfo.QUEUE_NAME, true, false, false, null);
String message = "Hello RabbitMQ";
//发送消息到队列中
channel.basicPublish("", QueueClusterInfo.QUEUE_NAME, null, message.getBytes("UTF-8"));
System.out.println("Producer Send +'" + message + "'");
//关闭通道和连接
channel.close();
connection.close();
} catch (IOException | TimeoutException e) {
System.out.println("Exception Message: " + e.getMessage());
e.printStackTrace();
}
}
}
haproxy和所有rabbitmq节点不在同一台机器上。
我觉得应该是我的haproxy配置(ip: 192.168.80.128)有问题,我的haproxy配置文件内容如下:
#
# demo config for Proxy mode
#
global
maxconn 2048
ulimit-n 8192
log 127.0.0.1 local0
uid 501
gid 501
#chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
nbproc 4
daemon
defaults
log global
mode http
option httplog
option dontlognull
retries 2
option httpclose
option abortonclose
maxconn 2048
timeout connect 5000ms
timeout client 30000ms
timeout server 30000ms
balance roundrobin
listen stats
bind 0.0.0.0:1080
mode http
option httplog
maxconn 10
stats refresh 30s
stats uri /stats
stats realm XingCloud Haproxy
stats auth admin:admin
stats auth Frank:Frank
stats admin if TRUE
listen rabbitmq_admin
bind 0.0.0.0:8004
mode http
server rabbitmq 192.168.80.130:15672
server rabbitbak 192.168.80.134:15672
server rabbitslave 192.168.80.133:15672
listen rabbitmq_cluster
bind 0.0.0.0:5670
mode tcp
balance roundrobin
server rabbitbak 192.168.80.134:5672 check inter 2000 rise 2 fall 3
server rabbitslave 192.168.80.133:5672 check inter 2000 rise 2 fall 3
server rabbitmq 192.168.80.130:5672 check inter 2000 rise 2 fall 3
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
两位大师好,刚又仔细的想了一下,Java应该不能通过haproxy往rabbitmq里发送消息吧,因为haproxy是做LB的,并不提供访问属性或逻辑,haproxy是针对浏览器请求的,而不是针对程序逻辑的,如果两位大师能够提供Java通过haproxy往rabbitmq里发送消息,请提供可执行的Java代码,谢谢!
server rabbitmq_disk_backup 172.16.32.110:5672 weight 3 inter 1000 rise 1 fall 2 backup
可以连接haproxy来发送消息到rabbitmq里 , 不需要轮询,发送和接收连接只负载到ram节点就可以。或者 去掉haproxy 在自己的服务里自做负载,可以均匀的分布connection和channel ,也可以按照自己的意愿 合理分配这些 connection和channel。