RedHat6.5安装rabbitMQ3.6.15

1 篇文章 1 订阅
  1. 首先卸载redhat的yum,安装centos6.5的yum

rpm -qa |grep yum
rpm -qa|grep yum|xargs rpm -e --nodeps #(不检查依赖,直接删除rpm包)
#重新安装yum
https://www.cnblogs.com/royfans/p/7249110.html

  1. 安装elrang

【坑
wget http://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm
yum install erlang-solutions-1.0-1.noarch.rpm
#使用yum安装erlang原因,erlang还有其余包,使用rpm -ivh 无法安装,yum会自动关联下载其他使用包,方便很多】
【卸载erl】
rpm -qa erlang
yum list | grep erlang
yum remove erlang-*
#rpm安装的erlabg版本为较低,不能使用在3.6.x上,需要使用gz安装
wget https://packages.erlang-solutions.com/erlang/esl-erlang-src/otp_src_17.0.tar.gz
tar -zxvf otp_src_17.0.tar.gz
cd otp_src_17.0
./configure --enable-threads --enable-smp-support --enable-kernel-poll --enable-hipe
make && make install

  1. 测试erlang

[root@localhost ~]# erl -v
Erlang/OTP 17 [erts-6.0] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false]
Eshell V6.0 (abort with ^G)
1> 32+12.
44
2> halt(). #退出

  1. 安装rabbitmq

wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.15/rabbitmq-server-3.6.15-1.el6.noarch.rpm
#不适用nodeps 安装会报错
rpm -i --nodeps rabbitmq-server-3.6.15-1.el6.noarch.rpm
cp /usr/share/doc/rabbitmq-server-3.6.15/rabbitmq.config.example /etc/rabbitmq/rabbitmq.config

4.1启动rabbitmq服务:

[root@localhost rabbitmq]# service rabbitmq-server start
Starting rabbitmq-server: rmdir: failed to remove `/var/run/rabbitmq’: Directory not empty
FAILED - check /var/log/rabbitmq/startup_{log, _err}
#报错使用,创建软连接
ln -s /usr/local/lib/erlang/bin/erl /usr/bin/erl

4.2 查看rabbitmq状态

service rabbitmq-server status

4.3 开启管理UI(一次即可)

rabbitmq-plugins enable rabbitmq_management
访问http://ip:15672/,使用以下添加的账户登录

4.4用户操作

#添加用户
rabbitmqctl add_user admin 123456
#删除账户
rabbitmqctl delete_user admin
#授权
rabbitmqctl set_permissions -p “/” admin “." ".” “.*”
#角色授权
rabbitmqctl set_user_tags admin administrator

4.5修改配置文件

cd /etc/rabbitmq/
mv rabbitmq.config rabbitmq.config_bak
vi rabbitmq.config
#加入以下配置,具体详细参数见http://www.blogjava.net/qbna350816/archive/2016/08/02/431415.aspx
[{rabbit, [
{loopback_users, []},
{heartbeat,5},
{hipe_compile,true},
{vm_memory_high_watermark_paging_ratio, 0.8},
{vm_memory_high_watermark, 0.6},
{msg_store_credit_disc_bound, {500, 100}},
{disk_free_limit, 500000000}]}].

#说明

4.6重启服务

service rabbitmq-server stop
service rabbitmq-server start

  1. java测试
    https://gitee.com/wangyanxu/RabbitMQTest.git

  2. nginx映射5672端口
    安装nginx时需要指定配置文件

./configure --prefix=/app/nginx --with-http_ssl_module --with-http_stub_status_module --with-stream
make && make install

启动nginx

sbin/nginx

vi nginx.conf #这样5678为对外的nginx映射

#添加stream与http同级
stream {
upstream rabbitmq{
hash $remote_addr consistent;
server 172.20.11.45:5672;
}
server {
listen 5678;
proxy_connect_timeout 60s;
proxy_pass rabbitmq;
}
}

如果防火墙开启,则需要开放tcp端口5678

private static final Logger logger = Logger.getLogger("RabbitMQ");
private static ConnectionFactory factory = null;
private static boolean durable = true;// 消息持久化,如果服务器挂了,不会丢失

private Connection getConn() {
		Connection conn = null;
		try {
			if (factory != null) {
				conn = factory.newConnection();
			}
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println(e.getMessage());
		}
		return conn;
	}
	
	@Override
	public boolean sendMsg(String queue, boolean msgCommand, String msg, Long expireTime) {
		Connection conn = getConn();
		if (conn == null) {
			return false;
		}
		Channel channel = null;
		try {
			channel = conn.createChannel();
			if(!checkQueue(conn, queue)){//不存在,创建队列
				channel.queueDeclare(queue, durable, false, false, null);
			}else{
				if(channel.consumerCount(queue) > 0){//有消费者才发送消息
					BasicProperties bp;
					if (expireTime == null) {
						bp = MessageProperties.PERSISTENT_TEXT_PLAIN;
					} else {
						bp = new AMQP.BasicProperties.Builder()// .headers(headers)//头可以设置参数
								.expiration(String.valueOf(expireTime))// 设置了一个过期时间
								.build();
					}
					channel.basicPublish("", queue, bp, msg.getBytes());
				}
			}
			return true;
		} catch (Exception e) {
			logger.error("queue=" + queue + ",msg=" + msg + ",RabbitMQsendMsgException:" + e.getMessage());
		} finally {
			close(conn, channel);
		}
		return false;
	}

	@Override
	public boolean sendMsgByGroup( String exchange, List<String> queuelist, boolean msgCommand, String msg, Long expireTime) {
		if (queuelist == null || msg == null) {
			return false;
		}
		Connection conn = getConn();
		if (conn == null) {
			return false;
		}
		BasicProperties bp;
		if (expireTime == null) {
			bp = MessageProperties.PERSISTENT_TEXT_PLAIN;
		} else {
			bp = new AMQP.BasicProperties.Builder()// .headers(headers)//头可以设置参数
					.expiration(String.valueOf(expireTime))// 设置了一个过期时间
					.build();
		}
		Channel channel = null;
		try {
			String routeName = "temp_" + exchange + "_" + queuelist.size();// 临时路由,发送完毕后删除
			channel = conn.createChannel();
			channel.exchangeDeclare(exchange, BuiltinExchangeType.DIRECT);
			List<String> tempQueueList = new ArrayList<>();
			for (String queue : queuelist) {
				if(!checkQueue(conn, queue)){//不存在,创建队列
					channel.queueDeclare(queue, durable, false, false, null);
				} else {
					if(channel.consumerCount(queue) > 0){//有消费者才发送消息
						tempQueueList.add(queue);
						channel.queueBind(queue, exchange, routeName);
					}
				}
			}
			channel.basicPublish(exchange, routeName, bp, msg.getBytes());
			for (String queue : tempQueueList) {
				channel.queueUnbind(queue, exchange, routeName);
			}
			return true;
		} catch (Exception e) {
			logger.error("queuelist=" + queuelist.size() + ",exchange=" + exchange + ",msg=" + msg
					+ ",RabbitMQsendMsgByGroupException:" + e.getMessage());
		} finally {
			close(conn, channel);
		}
		return false;
	}

	private void close(Connection conn, Channel channel) {
		if (channel != null) {
			try {
				channel.close();
			} catch (Exception e) {
			}
		}
		if (conn != null) {
			try {
				conn.close();
			} catch (Exception e) {
			}
		}
	}

	@Override
	public boolean getQueueStatus(String queue) {
		Connection conn = getConn();
		if (conn == null) {
			return false;
		}
		long result = 0;
		Channel channel = null;
		try {
			channel = conn.createChannel();
			if(!checkQueue(conn, queue)){//不存在,创建队列
				channel.queueDeclare(queue, true, false, false, null);
			}
			result = channel.consumerCount(queue);
		} catch (Exception e) {
			logger.error("queue="+queue+",GetEueueException: " + e.getMessage());
		}finally{
			close(conn, channel);
		}
		return result > 0 ? true : false;
	}
	
	private boolean checkQueue(Connection conn, String queue){
		try {
			Channel channel = conn.createChannel();
			channel.queueDeclarePassive(queue);
			try {
				channel.close();
			} catch (TimeoutException e) {
			}
			return true;
		} catch (IOException e) {
			return false;
		}
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值