- 安装
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 //解压
- 同样的,这里需要进行环境变量配置:
vim /etc/profile //编辑环境变量文件(CentOS系统默认环境变量文件,其他系统可能不一样)
export PATH=$PATH:/usr/local/rabbitmq_server-3.8.4/sbin //在末尾加入环境变量配置(路径根据实际情况选择)
source /etc/profile //实时生效
- 启动
RabbitMQ
,默认端口为6752
:
/usr/local/rabbitmq_server-3.8.4/sbin/./rabbitmq-server -detached //在后台启动。根据自己实际路径选择,或者也可以选择service或者systemctl等命令启动
- 如果没有报错则说明启动成功,启动之后默认会创建一个
guest/guest
账户,只能本地连接,所以还需要再重新创建一个用户,并给新用户授权(当然,我们也可以直接给guest
用户授权):
./rabbitmqctl add_user admin 123456 //创建用户admin
./rabbitmqctl set_user_tags admin administrator //添加标签
./rabbitmqctl set_permissions -p / admin “.*" ".*” “.*” //授权
RabbitMQ
默认还提供了可视化管理界面,需要手动开启一下,默认端口为15672
:
./rabbitmq-plugins enable rabbitmq_management //启动后台管理系统插件(禁止的话换成disable即可)
- 开启插件之后,可以通过访问:
http://ip:15672/
访问后台管理系统,并进行一些参数设置,账号密码就是上面添加的admin/123456
。
安装过程常见错误
安装过程中可能会出现如下图所示错误:
- odbc:ODBC library - link check failed:
解决方法:执行命令
yum install unixODBC.x86_64 unixODBC-devel.x86_64
进行安装。
- wx:wxWidgets not found, wx will NOT be usable:
解决方法:这个属于
APPLOICATION INFORMATION
,可以不处理。
- 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
来实现一个简单的生产者和消费者:
pom.xml
文件引入RabbitMQ
客户端依赖:
com.rabbitmq
amqp-client
5.6.0
- 新建一个消费者
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
}
}
- 新建一个生产者
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();
}
}
- 先启动消费者,启动之后消费者就会保持和
RabbitMQ
的连接,等待消息;然后再运行生产者,消息发送之后,消费者就可以收到消息:
利用SpringBoot 实现一个生产者和消费者
接下来再看看
SpringBoot
怎么与
RabbitMQ
集成并实现一个简单的生产者和消费者:
- 引入依赖(我这边
SpringBoot
用的是2.4.0
版本,所以如果用的低版本这个版本号也需要修改):
org.springframework.boot
spring-boot-starter-amqp
2.4.0
- 新增以下配置文件:
spring:
rabbitmq:
host: ip
port: 5672
username: admin
password: 123456
- 新建一个配置文件
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;
}
}
- 新建一个消费者
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);
}
}
- 新建一个消息发送者
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”;
}
版权归原作者 2401_85111653 所有, 如有侵权,请联系我们删除。