一、RabbitMQ安装
1. 安装C++依赖环境 使用gcc编译工具及库文件
yum -y install gcc gcc-c++ glibc-devel make ncurses-devel openssl openssl-devel xmlto perl wget java java-devel
2.安装Erlang环境 RabbitMQ依赖于Erlang,需要先安装Erlang,两者之间的版本对应关系www.rabbitmq.com/which-erlan…
cd /usr/local
wget http://erlang.org/download/otp_src_25.0.tar.gz
tar -zxvf otp_src_25.0.tar.gz
mkdir /usr/local/erlang
cd /usr/local/otp_src_25.0
./configure --prefix=/usr/local/erlang
make && make install
如果有提示缺少其他的依赖包,则按提示安装 命令:yum install -y [缺少的依赖]
3. 安装RabbitMQ
下载rabbitmq-server-generic-unix-3.10.7.tar.xz,然后上传到服务器中的文件夹/usr/local/rabbitmq。
cd /usr/local/
mkdir rabbitmq
cd rabbitmq/
访问网址github.com/rabbitmq/ra…进行下载,使用Xftp等工具进行上传。
解压RabbitMQ
tar -xvf rabbitmq-server-generic-unix-3.10.7.tar
二、RabbitMQ配置
1. 进入/etc/profile配置环境变量
vim /etc/profile
添加以下内容
# erlang
export PATH=$PATH:/usr/local/erlang/bin
# rabbitmq
export PATH=$PATH:/usr/local/rabbitmq/rabbitmq_server-3.10.7/sbin
使环境变量/etc/profile生效,命令:
source /etc/profile
输入erl,若结果会出现版本信息,则Erlang安装成功。
2. 开启RabbitMQ管理权限
cd /usr/local/rabbitmq/rabbitmq_server-3.10.7/sbin
./rabbitmq-plugins enable rabbitmq_management
3. 启动RabbitMQ
cd /usr/local/rabbitmq/rabbitmq_server-3.10.7/sbin
./rabbitmq-server start
# 或者
./rabbitmq-server -detached
若结果出现Rabbitmq的版本信息,且最后显示为“Starting broker... completed with 3 plugins.”,则Rabbitmq安装成功。
4. 使用RabbitMQ
创建用户分配权限 因guest用户只能在本机访问,所以需要添加一个admin用户,密码设为admin123。添加用户只能在Rabbitmq启动的状态下进行,因此,需要另打开一个shell来进行操作。
# 创建用户并分配权限
cd /usr/local/rabbitmq/rabbitmq_server-3.10.7/sbin
# 创建新用户以及用户名
./rabbitmqctl add_user admin admin123
# 给新用户赋以管理权限
./rabbitmqctl set_user_tags admin administrator
# 给用户赋以其他权限
./rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
# 查看用户和其分配的权限
rabbitmqctl list_users
# 以下操作无须使用
# 删除用户
rabbitmqctl delete_user admin
# 修改用户的密码
rabbitmqctl change_password admin [Newpassword]
访问 [服务器的ip]:15672,并输入设置的admin用户密码进行可视化界面访问。
三、RabbitMQ简单demo操作使用
引入相关依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
相关配置
spring:
# RabbitMQ 配置项,对应 RabbitProperties 配置类
rabbitmq:
host: 127.0.0.1 # RabbitMQ 服务的地址
port: 5672 # RabbitMQ 服务的端口
username: admin # RabbitMQ 服务的账号
password: admin123 # RabbitMQ 服务的密码
以直连交换机为例 配置类
import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RabbitmqDirectConfig {
public static final String QUEUE_NAME = "QUEUE_DEMO_DIRECT";
public static final String EXCHANGE_NAME = "DIRECT_EXCHANGE";
public static final String ROUTING_KEY = "ROUTING_KEY_01";
@Bean("demoDirectExchange")
public Exchange demoDirectExchange(){
return ExchangeBuilder.directExchange(EXCHANGE_NAME).durable(true).build();
}
@Bean("demoDirectQueue")
public Queue demoDirectQueue(){
return QueueBuilder.durable(QUEUE_NAME).build();
}
@Bean
public Binding bindDirectQueueExchange(@Qualifier("demoDirectQueue") Queue queue, @Qualifier("demoDirectExchange") Exchange exchange){
return BindingBuilder.bind(queue).to(exchange).with(ROUTING_KEY).noargs();
}
}
消息监听-消费者
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component
public class RabbitmqListener {
private Logger logger = LoggerFactory.getLogger(RabbitmqListener.class);
@RabbitListener(queues = "QUEUE_DEMO_DIRECT")
public void ListenerQueue01(Message message) {
System.out.println("message====" + message);
logger.info("[onMessage][线程编号:{} 消息内容:{}]", Thread.currentThread().getId(), message);
}
}
启动SpringBoot项目
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
创建一个测试类用于生产者发送消息
@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoApplicationTests {
@Autowired
private RabbitTemplate rabbitTemplate;
@Test
public void DirectExchange() {
rabbitTemplate.convertAndSend(RabbitmqDirectConfig.EXCHANGE_NAME, RabbitmqDirectConfig.ROUTING_KEY, "mq hello Direct");
System.out.println("发送消息mq hello Direct成功");
}
}
结果展示
发送消息成功
成功接收到消息
完成!