Linux中安装rabbitmq
我的版本是centOS 6.8的7版本的可能与这个版本的安装不太一样
找个地方创建rabbitmq的文件夹
执行命令进入后进行编辑
编辑内容如下内容是6.x的配置
开始安装rabbitmq的语言插件 erlang
用erl 查看是否安装好
socat安装
epel是yum的一个软件源,里面包含了许多基本源里没有的软件。因此,这里安装epel阿里云源,下载新repo 到/etc/yum.repos.d/,根据系统版本选择下载
yum -y install socat 进行安装
开始安装rabbitmq
去https://dl.bintray.com/rabbitmq/all/rabbitmq-server/3.7.2/rabbitmq-server-3.7.2-1.el6.noarch.rpm
下载对应的mq包 不用解压 执行下面的命令
启动、停止
service rabbitmq-server start
service rabbitmq-server stop
service rabbitmq-server restart
设置开机启动
chkconfig rabbitmq-server on
设置配置文件
cd /etc/rabbitmq
cp /usr/share/doc/rabbitmq-server-3.4.1/rabbitmq.config.example /etc/rabbitmq/
mv rabbitmq.config.example rabbitmq.config
开启用户远程访问
vi /etc/rabbitmq/rabbitmq.config
找到后将其改为如下图中内容
注意将其后的,号去掉
开启web界面管理工具
rabbitmq-plugins enable rabbitmq_management
service rabbitmq-server restart
防火墙开放15672端口
/sbin/iptables -I INPUT -p tcp --dport 15672 -j ACCEPT
/etc/rc.d/init.d/iptables save
将防火墙关闭,不然你将吃亏很多
-
重启后生效
开启: chkconfig iptables on
关闭: chkconfig iptables off -
即时生效,重启后失效
开启: service iptables start
关闭: service iptables stop
这样就好了可以在网页中输入网址加15672了
可以进行配置用户一般不用默认的用户guest
开始set数据库如上图 名字前要加/
将用户set进去
这样就可以去发送消息了
下面给大家创建一个简单的队列 我的其他博客中有mq的代码与简单讲解共勉
public class ConnectionUtiles {
/**
* 获取MQ的连接
*/
public static Connection getConnection() throws IOException, TimeoutException {
//定义一个连接工厂
ConnectionFactory factory = new ConnectionFactory();
//设置服务地址
factory.setHost("127.0.0.1");
//MQ连接的端口 5672 设置端口号
factory.setPort(5672);
//vhost 在rabbitmq界面上获得 设置数据库
factory.setVirtualHost("/vhost_ly");
//设置用户名 界面上分配的用户名
factory.setUsername("/user_ly");
//设置密码 分配的密码
factory.setPassword("123");
return factory.newConnection();
}
}
简单的消息队列
发送方------->队列------>接收方 一对一的发送消息 (这种比较单一发送与接收等待时间长,且无法达到想要的效果)
发送方
public class Sender {
private static final String QUEUE_NAME="test_simple_queue";
public static void main(String[] args) throws IOException, TimeoutException {
//获取一个连接
Connection connection = ConnectionUtiles.getConnection();
//从连接中获取一个通道
Channel channel = connection.createChannel();
//创建队列声明
channel.queueDeclare(QUEUE_NAME,false,false,false,null);
String msq = "hello simple !";
channel.basicPublish("",QUEUE_NAME,null,msq.getBytes());
System.out.println("--send msq"+msq);
//关闭数据关闭连接
channel.close();
connection.close();
}
}
接收方:
public class Receiver{
/**
* 简单队列的不足
* 耦合性高,生产者一一对应消费者(如果我想有多个消费者消费队列中消息,这时就不行了)
* 队列名变更,这时得同时变更
*
* simple队列是一一对应的,而我们实际开发,生产者发送消息是毫不费力的,
* 而消费者一般是跟业务相结合的,消费者接收到消息之后就需要处理 可能需要花费时间,
* 这时队列就会积压了很多消息
*/
//定义队列名称 定义一次后已经启动不能修改,修改将报错,因为一个名称只能定义一次,除非再定义其他的名称
private static final String QUEUE_NAME="test_simple_queue";
@SuppressWarnings("deprecation")
public static void main(String[] args) throws IOException, TimeoutException {
//获取一个连接
Connection connection = ConnectionUtiles.getConnection();
//创建频道
Channel channel = connection.createChannel();
//队列声明
channel.queueDeclare(QUEUE_NAME,false,false,false,null);
//定义消费者
DefaultConsumer consumer = new DefaultConsumer(channel){
//获取到达的消息
@Override
public void handleDelivery(String consumerTag, Envelope envelope,
AMQP.BasicProperties properties, byte[] body) throws IOException{
String msg = new String(body,"utf-8");
System.out.println("new api recv:"+msg);
}
};
//监听队列
channel.basicConsume(QUEUE_NAME,true,consumer);
}
}
发送消息
已经发送成功
接收消息
这样就接收成功了