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

shihuan 发布于 2017/06/19 11:24
阅读 2K+
收藏 0

如何使用英特尔®oneAPI工具实现PyTorch 优化,直播火热报名中>>>

第一、成功的搭建了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

 

加载中
0
司马建邺
司马建邺

可以连接haproxy来发送消息到rabbitmq里 , 不需要轮询,发送和接收连接只负载到ram节点就可以。或者 去掉haproxy 在自己的服务里自做负载,可以均匀的分布connection和channel ,也可以按照自己的意愿 合理分配这些 connection和channel。

0
Michael-曾浩
Michael-曾浩

server rabbitmq_disk_backup 172.16.32.110:5672 weight 3 inter 1000 rise 1 fall 2 backup

0
shihuan
shihuan
该评论暂时无法显示,详情咨询 QQ 群:点此入群
0
shihuan
shihuan

两位大师好,刚又仔细的想了一下,Java应该不能通过haproxy往rabbitmq里发送消息吧,因为haproxy是做LB的,并不提供访问属性或逻辑,haproxy是针对浏览器请求的,而不是针对程序逻辑的,如果两位大师能够提供Java通过haproxy往rabbitmq里发送消息,请提供可执行的Java代码,谢谢!

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部