Java连接haproxy管控的rabbitmq集群问题

shihuan830619 2017-06-19 09:46:38
第一、成功的搭建了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
...全文
821 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdulcc 2017-12-14
  • 打赏
  • 举报
回复
楼主你好,请问问题解决了吗
KUkaKaaa 2017-09-07
  • 打赏
  • 举报
回复
楼主,这个问题解决了么,我发现即使通过负载均衡,也是在第一次建立连接的时候负载均衡,建立一个连接,之后这个连接的所有的 channel 的操作的压力还都是在连接的这个节点上,并不会在发送或接收的时候进行合适的轮询转发。

23,404

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧