RabbitMQ教程
1. 创建rabbitmq的安装目录
cd /usr/local/
mkdir rabbitmq
cd rabbitmq
2. Erlang:一种通用的面向并发的编程语言
下载erlang:
wget http://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm
rpm-Erlang包:
rpm -Uvh erlang-solutions-1.0-1.noarch.rpm
rpm --import http://packages.erlang-solutions.com/rpm/erlang_solutions.asc
安装Erlang:
sudo yum install erlang
查看是否安装成功:
erl
退出:
halt().
查看安装路径
whereis erlang
3. 安装RabbitMQ
上传文件:
rabbitmq-server-3.7.16-1.noarch.rpm文件到/usr/local/rabbitmq/
安装:
rpm -ivh rabbitmq-server-3.7.16-1.noarch.rpm
注意:如果安装报错:error: Failed dependencies: socat is needed by rabbitmq-server-3.7.16-1.el6.noarch
请先安装socat网络工具,执行命令:yum -y install socat
4.设置配置文件
cd /etc/rabbitmq
cp /usr/share/doc/rabbitmq-server-3.4.1/rabbitmq.config.example /etc/rabbitmq/
mv rabbitmq.config.example rabbitmq.config
5.开启用户远程访问
vi /etc/rabbitmq/rabbitmq.config
注意要去掉后面的逗号。
6.启动、停止
service rabbitmq-server start
service rabbitmq-server stop
service rabbitmq-server restart
7.设置开机启动
chkconfig rabbitmq-server on
8.防火墙开放15672端口
/sbin/iptables -I INPUT -p tcp --dport 15672 -j ACCEPT
/sbin/iptables -I INPUT -p tcp --dport 5672 -j ACCEPT
/etc/rc.d/init.d/iptables save
查看端口打开
/etc/init.d/iptables status
9.开启web界面管理工具
rabbitmq-plugins enable rabbitmq_management
重启服务
service rabbitmq-server restart
可视化地址:http://192.168.0.248:15672
初始账户和密码都是guest
可视化示例图:
首页描述:
端口描述:
创建用户和角色:
创建Virtual Hosts:
Spring Boot 集成 RabbitMQ
Spring Boot 集成 RabbitMQ 非常简单,如果只是简单的使用配置非常少,Spring Boot 提供了spring-boot-starter-amqp 项目对消息各种支持。
简单使用
1、配置 Pom 包,主要是添加 spring-boot-starter-amqp 的支持
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
2、配置文件
配置 RabbitMQ 的安装地址、端口以及账户信息
spring.application.name=Spring-boot-rabbitmq
spring.rabbitmq.host=192.168.0.248
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=123456
#host不写默认为/
spring.rabbitmq.virtual-host=testHost
3、队列配置
@Configuration
public class RabbitConfig {
@Bean
public Queue Queue() {
return new Queue("hello");
}
}
3、发送者
rabbitTemplate 是 Spring Boot 提供的默认实现
@component
public class HelloSender {
@Autowired
private AmqpTemplate rabbitTemplate;
public void send() {
String context = "hello " + new Date();
System.out.println("Sender : " + context);
this.rabbitTemplate.convertAndSend("hello", context);
}
}
4、接收者
@Component
@RabbitListener(queues = "hello")
public class HelloReceiver {
@RabbitHandler
public void process(String hello) {
System.out.println("Receiver : " + hello);
}
}
5、测试
@RunWith(SpringRunner.class)
@SpringBootTest
public class RabbitMqHelloTest {
@Autowired
private HelloSender helloSender;
@Test
public void hello() throws Exception {
helloSender.send();
}
}
注意,发送者和接收者的 queue name 必须一致,不然不能接收
多对多使用
一个发送者,N 个接收者或者 N 个发送者和 N 个接收者会出现什么情况呢?
一对多发送
对上面的代码进行了小改造,接收端注册了两个 Receiver,Receiver1 和 Receiver2,发送端加入参数计数,接收端打印接收到的参数,下面是测试代码,发送一百条消息,来观察两个接收端的执行效果
@Test
public void oneToMany() throws Exception {
for (int i=0;i<100;i++){
neoSender.send(i);
}
}