安装erlang
- 安装依赖:
yum install ncurses-devl
- 下载安装包:http://www.erlang.org/downloads/
- 进入解压后的安装包,执行
./configure --prefix=/usr/local/erlang/ --without-javac
- 编译安装:make && make install
安装 RabbitMQ
- 安装Python:
yum install python -y
- 安装依赖xmlto :
yum install xmlto
- 安装依赖simplejson:
yum install simplejson
- 下载安装包:https://www.rabbitmq.com/install-generic-unix.html
- 解压RabbitMQ压缩包:使用
xz -d 和 tar zxvf
命令先后解压 - 将解压后文件move到/usr/local目录下,因为我默认安装的软件都在这个目录下:
mv 解压后的文件名 /usr/local/rabbitmq
- 开启rabbitMQ:进入到
/usr/local/rabbitmq/sbin
目录中,执行./rabbitmq-server &
- 关闭rabbitMQ:进入到
/usr/local/rabbitmq/sbin
目录中,执行./rabbitmqctl stop
- 查看端口状态:
netstat -anp | grep 5672
- Mac OS 下使用
sudo lsof -nP -iTCP:端口号 -sTCP:LISTEN
查看端口状态
-n 表示不显示主机名,-P 表示不显示端口俗称,不加 sudo 只能查看以当前用户运行的程序,可以后接管道符 sudolsof -nP -iTCP grep ‘8080’
- 查看进程信息:
ps -ef | grep rabbit
安装出现的问题
- 无法找到erlang时出现的错误:./rabbitmq-server: line 187: erl: command not found ,解决方法:在rabbitmq-server文件中的187行处添加
ERLANG_HOME=/usr/local/erlang21
export PATH=$PATH:$ERLANG_HOME/bin
- 无法找到erlang时出现的错误:./rabbitmq-env: line 415: exec: erl: not found,解决方法与1相同,在rabbitmq-env文件的415行处添加erlang配置目录
- 无法成功连接的错误:
org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connection refused (Connection refused)
,在整合SpringBoot与RabbitMQ时,由于配置文件如下所示设置的连接用户为guest,而guest是不能远程连接的,因此要添加一个配置文件。
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
在/usr/local/rabbitmq/etc/rabbitmq
目录下新建一个名为且必须为rabbitmq.config的配置文件,里面填上
[{rabbit, [{loopback_users, []}]}].
- 若是还是无法连接成功,查看防火墙是否打开了5672端口,若是未打开,执行以下操作:
sudo vim /etc/sysconfig/iptables
## rabbitMQ 在防火墙文件中打开5672端口
-A INPUT -p tcp -m tcp --dport 5672 -j ACCEPT
#重启防火墙
sudo service iptables restart
测试RabbitMQ
// 队列配置文件
@Configuration
public class MQConfig {
public static final String QUEUE = "queue";
@Bean
public Queue queue() {
return new Queue(QUEUE, true);
}
}
// 发送者
@Service
public class MQSender {
@Autowired
AmqpTemplate amqpTemplate;
public void send(Object message) {
String msg = RedisService.beanToString(message);
log.info("send message:" + msg);
amqpTemplate.convertAndSend(MQConfig.QUEUE, msg);
}
}
// 接受者
@Service
public class MQReceiver {
@RabbitListener(queues = MQConfig.QUEUE)
public void receive(String message) {
log.info("receive message:" + message);
}
}
// 测试接口
@RequestMapping("/rabbitmq")
@ResponseBody
public void rabbitmq() {
mqSender.send("hello,dazou");
}
结果
2019-04-14 16:51:51.545 INFO 13609 --- [nio-8080-exec-1] com.dazou.miaosha.rabbitmq.MQSender : send message:hello,dazou
2019-04-14 16:51:51.593 INFO 13609 --- [cTaskExecutor-4] com.dazou.miaosha.rabbitmq.MQReceiver : receive message:hello,dazou