Linux系统RabbitMQ配置
1.下载虚拟机并解压
Linux下载链接:https://pan.baidu.com/s/1bAjZqwkLYiCTGVdxr7eFOw
提取码:o557
2.修改虚拟机的名字
3.设置固定 ./ip-static
4.MobaXterm_Personal连接虚拟机
MobaXterm_Personal下载链接:https://pan.baidu.com/s/1P5AfbytrrtI8CqoX8p0rhw
提取码:txjk
4.解压rabbitMQ解压文件拖入MobaXterm_Personal
rabbitMQ链接:https://pan.baidu.com/s/1kTS-8pG1n6Q_ad40YdnFMA
提取码:q2w6
4.1进入文件夹
安装
rpm -ivh *.rpm
Yum在线安装
以下内容来自 RabbitMQ 官方手册
rpm --import https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
# centos7 用这个
cat <<EOF > /etc/yum.repos.d/rabbitmq.repo
[bintray-rabbitmq-server]
name=bintray-rabbitmq-rpm
baseurl=https://dl.bintray.com/rabbitmq/rpm/rabbitmq-server/v3.8.x/el/7/
gpgcheck=0
repo_gpgcheck=0
enabled=1
EOF
# centos6 用这个
cat <<EOF > /etc/yum.repos.d/rabbitmq.repo
[bintray-rabbitmq-server]
name=bintray-rabbitmq-rpm
baseurl=https://dl.bintray.com/rabbitmq/rpm/rabbitmq-server/v3.8.x/el/6/
gpgcheck=0
repo_gpgcheck=0
enabled=1
EOF
yum makecache
yum install socat
wget https://github.com/rabbitmq/erlang-rpm/releases/download/v21.3.8.12/erlang-21.3.8.12-1.el7.x86_64.rpm
rpm -ivh erlang-21.3.8.12-1.el7.x86_64.rpm --force --nodeps
yum install rabbitmq-server
4.2 启动rabbitmq服务器
# 设置服务,开机自动启动
systemctl enable rabbitmq-server
# 启动服务
systemctl start rabbitmq-server
4.3 rabbitmq管理界面
启用管理界面
# 开启管理界面插件
rabbitmq-plugins enable rabbitmq_management
# 防火墙打开 15672 管理端口
firewall-cmd --zone=public --add-port=15672/tcp --permanent
firewall-cmd --reload
4.4 开启管理界面插件
rabbitmq-plugins enable rabbitmq_management
4.5防火墙打开 15672 管理端口
firewall-cmd --zone=public --add-port=15672/tcp --permanent
firewall-cmd --reload
4.6重启RabbitMQ服务
systemctl restart rabbitmq-server
访问
访问服务器的15672端口,例如:
http://192.168.64.140:15672
添加用户
# 添加用户
rabbitmqctl add_user admin admin
# 新用户设置用户为超级管理员
rabbitmqctl set_user_tags admin administrator
设置访问权限
用户管理参考
https://www.cnblogs.com/AloneSword/p/4200051.html
开放客户端连接端口
# 打开客户端连接端口
firewall-cmd --zone=public --add-port=5672/tcp --permanent
firewall-cmd --reload
主要端口介绍
4369 – erlang发现口
5672 – client端通信口
15672 – 管理界面ui端口
25672 – server间内部通信口
Java类中RabbitMQ配置
简单模式
导入依赖
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.4.3</version>
</dependency>
生成者配置
package m1_sinple;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
public class Producer {
public static void main(String[] args) throws IOException, TimeoutException {
//连接Rabbitmq服务器
ConnectionFactory f=new ConnectionFactory();
f.setHost("192.168.126.140");//www.wht6.cn
f.setPort(5672);//收发消息端口 15672 管理界面
f.setUsername("admin");
f.setPassword("admin");
//定义队列
/*
如果使用我的服务器,每个同学使用自己的虚拟主机,避免相互影响
*/
f.setVirtualHost("/nq");//设置虚拟主机
Connection con=f.newConnection();
Channel c= con.createChannel();
//发送消息
//五个参数
//队列名,是否持久队列,是否排他(独占)队列,是否自动删除,其他参数属性
c.queueDeclare("helloworld",false,false,false,null);
//发送参数
//4个参数
//空串 --后面用到时在介绍,队列名,其他参数属性,消息数据
c.basicPublish("","helloworld",null,"Hello word".getBytes());
System.out.println("消息已经发送");
c.close();
con.close();
}
}
消费者配置
package m1_sinple;
import com.rabbitmq.client.*;
import jdk.nashorn.internal.runtime.regexp.joni.constants.Arguments;
import sun.plugin2.message.Message;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
public class Consumer {
public static void main(String[] args) throws IOException, TimeoutException {
//连接
ConnectionFactory f=new ConnectionFactory();
f.setHost("192.168.126.140");
//f.setPort(5672);默认端口可以省略
f.setUsername("admin");
f.setPassword("admin");
f.setVirtualHost("/nq");
Channel c =f.newConnection().createChannel();
//定义队列
c.queueDeclare("helloworld",false,false,false, null);
DeliverCallback deliverCallback=new DeliverCallback(){
@Override
public void handle(String consumerTage, Delivery message) throws IOException {
byte[] body= message.getBody();
String msg= new String(body);
System.out.println("收到:"+msg);
}
};
CancelCallback cancelCallback=new CancelCallback() {
@Override
public void handle(String s) throws IOException {
}
};
//
c.basicConsume("helloworld",true,deliverCallback, cancelCallback);
}
}
工业模式
生成者模式
package m2_work;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.MessageProperties;
import java.io.IOException;
import java.util.Scanner;
import java.util.concurrent.TimeoutException;
public class Producer {
public static void main(String[] args) throws IOException, TimeoutException {
//连接
ConnectionFactory f=new ConnectionFactory();
f.setHost("192.168.126.140");
//f.setPort(5672);
f.setUsername("admin");
f.setPassword("admin");
f.setVirtualHost("/nq");
Channel c=f.newConnection().createChannel();
//定义消息队列
c.queueDeclare("task_queue",true,false,false,null);
//发送消息
while (true){
System.out.print("输入消息:");
String msg=new Scanner(System.in).nextLine();
c.basicPublish("","task_queue", MessageProperties.PERSISTENT_TEXT_PLAIN,msg.getBytes());
}
}
}
消费者模式
package m2_work;
import com.rabbitmq.client.*;
import sun.plugin2.message.Message;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
public class Consumer {
public static void main(String[] args) throws IOException, TimeoutException {
//连接
ConnectionFactory f=new ConnectionFactory();
f.setHost("192.168.126.140");
//f.setPort(5672);
f.setUsername("admin");
f.setPassword("admin");
f.setVirtualHost("/nq");
Channel c=f.newConnection().createChannel();
//定义队列
c.queueDeclare("task_queue",true,false,false,null);
DeliverCallback deliverCallback=new DeliverCallback() {
@Override
public void handle(String s, Delivery message) throws IOException {
String msg=new String(message.getBody());
System.out.println("收到消息:"+msg);
for(int i=0;i<msg.length();i++){
if(msg.charAt(i)=='.'){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
}
}
c.basicAck(message.getEnvelope().getDeliveryTag(),false);
System.out.println("消息处理完成");
}
};
CancelCallback cancelCallback=new CancelCallback() {
@Override
public void handle(java.lang.String s) throws IOException {
}
};
//QOS :Quality Of service
//理解:每次抓取消息的数量
//如果设置为1,每次抓取的数量为1,这条消息处理完成之前,不会自动抓取
//必须在手动ack里面设置
c.basicQos(1);
// 设置手动ack b设置为fasle
c.basicConsume("task_queue",false,deliverCallback,cancelCallback);
System.out.println("开始消费数据");
}
}