RabbitMQ,想说爱你不容易(附详细安装教程)

在这里插入图片描述

  1. 安装 RabbitMQ

wget https://dl.bintray.com/rabbitmq/all/rabbitmq-server/3.8.4/rabbitmq-server-generic-unix-3.8.4.tar.xz //下载RabbitMQ

xz -d rabbitmq-server-generic-unix-3.8.4.tar.xz //解压

tar -xvf rabbitmq-server-generic-unix-3.8.4.tar //解压

  1. 同样的,这里需要进行环境变量配置:

vim /etc/profile //编辑环境变量文件(CentOS系统默认环境变量文件,其他系统可能不一样)

export PATH=$PATH:/usr/local/rabbitmq_server-3.8.4/sbin //在末尾加入环境变量配置(路径根据实际情况选择)

source /etc/profile //实时生效

  1. 启动 RabbitMQ ,默认端口为 6752

/usr/local/rabbitmq_server-3.8.4/sbin/./rabbitmq-server -detached //在后台启动。根据自己实际路径选择,或者也可以选择service或者systemctl等命令启动

  1. 如果没有报错则说明启动成功,启动之后默认会创建一个 guest/guest 账户,只能本地连接,所以还需要再重新创建一个用户,并给新用户授权(当然,我们也可以直接给 guest 用户授权):

./rabbitmqctl add_user admin 123456 //创建用户admin

./rabbitmqctl set_user_tags admin administrator //添加标签

./rabbitmqctl set_permissions -p / admin “." ".” “.*” //授权

  1. RabbitMQ 默认还提供了可视化管理界面,需要手动开启一下,默认端口为 15672

./rabbitmq-plugins enable rabbitmq_management //启动后台管理系统插件(禁止的话换成disable即可)

  1. 开启插件之后,可以通过访问:http://ip:15672/ 访问后台管理系统,并进行一些参数设置,账号密码就是上面添加的 admin/123456

在这里插入图片描述

安装过程常见错误

安装过程中可能会出现如下图所示错误:

在这里插入图片描述

  1. odbc:ODBC library - link check failed:

解决方法:执行命令 yum install unixODBC.x86_64 unixODBC-devel.x86_64 进行安装。

  1. wx:wxWidgets not found, wx will NOT be usable:

解决方法:这个属于 APPLOICATION INFORMATION ,可以不处理。

  1. fakefop to generate placeholder PDF files,documentation: fop is missing.Using fakefop to generate placeholder PDF files:

解决方法:执行命令 yum install fop.noarch 进行安装。

利用 Java API 实现一个生产者和消费者


接下来用 Java 原生的 API 来实现一个简单的生产者和消费者:

  1. pom.xml 文件引入RabbitMQ 客户端依赖:

com.rabbitmq

amqp-client

5.6.0

  1. 新建一个消费者 TestRabbitConsumer 类:

package com.lonelyWolf.rabbitmq;

import com.rabbitmq.client.*;

import java.io.IOException;

public class TestRabbitConsumer {

public static void main(String[] args) throws Exception{

ConnectionFactory factory = new ConnectionFactory();

factory.setUri(“amqp://admin:123456@ip:5672”);

Connection conn = factory.newConnection();//建立连接

Channel channel = conn.createChannel(); //创建消息通道

channel.queueDeclare(“TEST_QUEUE”, false, false, false, null);//声明队列

System.out.println(“正在等待接收消息…”);

Consumer consumer = new DefaultConsumer(channel) {//创建消费者

@Override

public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties,byte[] body) throws IOException {

System.out.println("收到消息: " + new String(body, “UTF-8”) + “,当前消息ID为:” + properties.getMessageId());

System.out.println(“收到自定义属性:”+ properties.getHeaders().get(“name”));

}

};

channel.basicConsume(“TEST_QUEUE”, true, consumer);//消费之后,回调给consumer

}

}

  1. 新建一个生产者 TestRabbitProducter类:

package com.lonelyWolf.rabbitmq;

import com.rabbitmq.client.AMQP;

import com.rabbitmq.client.Channel;

import com.rabbitmq.client.Connection;

import com.rabbitmq.client.ConnectionFactory;

import java.util.HashMap;

import java.util.Map;

import java.util.UUID;

public class TestRabbitProducter {

public static void main(String[] args) throws Exception {

ConnectionFactory factory = new ConnectionFactory();

factory.setUri(“amqp://admin:123456@ip:5672”);

Connection conn = factory.newConnection();// 建立连接

Channel channel = conn.createChannel();//创建消息通道

Map<String, Object> headers = new HashMap<String, Object>(1);

headers.put(“name”, “双子孤狼”);//可以自定义一些自定义的参数和消息一起发送过去

AMQP.BasicProperties properties = new AMQP.BasicProperties.Builder()

.contentEncoding(“UTF-8”) //编码

.headers(headers) //自定义的属性

.messageId(String.valueOf(UUID.randomUUID()))//消息id

.build();

String msg = “Hello, RabbitMQ”;//需要发送的消息

channel.queueDeclare(“TEST_QUEUE”, false, false, false, null); //声明队列

channel.basicPublish(“”, “TEST_QUEUE”, properties, msg.getBytes());//发送消息

channel.close();

conn.close();

}

}

  1. 先启动消费者,启动之后消费者就会保持和 RabbitMQ 的连接,等待消息;然后再运行生产者,消息发送之后,消费者就可以收到消息:

在这里插入图片描述

利用SpringBoot 实现一个生产者和消费者


接下来再看看 SpringBoot 怎么与 RabbitMQ 集成并实现一个简单的生产者和消费者:

  1. 引入依赖(我这边 SpringBoot 用的是 2.4.0 版本,所以如果用的低版本这个版本号也需要修改):

org.springframework.boot

spring-boot-starter-amqp

2.4.0

  1. 新增以下配置文件:

spring:

rabbitmq:

host: ip

port: 5672

username: admin

password: 123456

  1. 新建一个配置文件 RabbitConfig 类,创建一个队列:

package com.lonely.wolf.rabbit.config;

import org.springframework.amqp.core.Queue;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

@Configuration

public class RabbitConfig {

@Bean(“simpleRabbitQueue”)

public Queue getFirstQueue(){

Queue queue = new Queue(“SIMPLE_QUEUE”);

return queue;

}

}

  1. 新建一个消费者 SimpleConsumer 类(注意这里监听的名字要和上面定义的保持一致):

package com.lonely.wolf.rabbit.consumer;

import org.springframework.amqp.rabbit.annotation.RabbitHandler;

import org.springframework.amqp.rabbit.annotation.RabbitListener;

import org.springframework.stereotype.Component;

@RabbitListener(queues = “SIMPLE_QUEUE”)

@Component

public class SimpleConsumer {

@RabbitHandler

public void process(String msg){

System.out.println(“收到消息:” + msg);

}

}

  1. 新建一个消息发送者 HelloRabbitController 类(发送消息的队列名要和消费者监听的队列名一致,否则无法收到消息),运行之后调用对应接口,消费者类 SimpleConsumer 就可以收到消息:

package com.lonely.wolf.rabbit.controller;

import org.springframework.amqp.core.Message;

import org.springframework.amqp.rabbit.core.RabbitTemplate;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestParam;

import org.springframework.web.bind.annotation.RestController;

@RestController

@RequestMapping(“/hello”)

public class HelloRabbitController {

@Autowired

private RabbitTemplate rabbitTemplate;

@GetMapping(value=“/send”)

public String clearVipInfo(@RequestParam(value = “msg”,defaultValue = “no message”) String msg){

rabbitTemplate.convertAndSend(“SIMPLE_QUEUE”,msg);

return “succ”;

}

  • 21
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值