如何在Windows 上配置 RabbitMQ
之前的电脑爆炸了,现在重装系统,以记录如何配置RabbitMQ
RabbitMQ_DOC
RabbitMQ_INSTALL
本地直接跑一个docker ,或者远程服务器
latest RabbitMQ 4.x
1
| docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:4-management
|
下载windows包
访问RabbitMQ
到Installation Guides 下载Windows Installer
配置管理面板
到安装目录的 sbin 运行扩展安装管理面板
.\rabbitmq-plugins.bat enable rabbitmq_management
访问管理面板
管理员运行程序 RabbitMQ Service Start
打开local management
如果管理面板无法打开
还是在sbin 下
1 2 3
| .\rabbitmqctl start_app .\rabbitmq-plugins.bat enable rabbitmq_management .\rabbitmqctl stop
|
随后确保 RabbitMQ Service Start
nginx 配置
Spring Boot 代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| ### 项目启动同时启动消息队列,如果消息队列启动失败,则项目不应该启动成功 @Slf4j @Component public class InitRabbitMQ {
@PostConstruct public void init() { try { ConnectionFactory factory = new ConnectionFactory(); factory.setHost("localhost"); factory.setUsername("guest"); factory.setPassword("guest"); Connection connection = factory.newConnection(); Channel channel = connection.createChannel();
String EXCHANGE_NAME = "likaojbackendjudgeservice"; channel.exchangeDeclare(EXCHANGE_NAME, "direct");
String QUEUE_NAME = "judge_queue"; channel.queueDeclare(QUEUE_NAME, false, false, false, null); channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, "judge_routingkey"); connection.close(); } catch (IOException | TimeoutException e) { log.error("RabbitMQ init error: {}", e.getMessage()); } log.info("RabbitMQ init success."); } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
@Component public class MessageProducer {
@Resource private RabbitTemplate rabbitTemplate;
public void sendMessage(String exchange, String routingKey, String message) { rabbitTemplate.convertAndSend(exchange, routingKey, message); } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
@Slf4j @Component public class MessageConsumer { @Resource private JudgeService judgeService;
@SneakyThrows @RabbitListener(queues = {"judge_queue"}, ackMode = "MANUAL") public void receiveMessage(String message, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long deliveryTag) { log.info("Received message: {}", message); try { channel.basicAck(deliveryTag, false); } catch (Exception e) { log.error("Judge failed: {}", e.getMessage()); channel.basicNack(deliveryTag, false, false); } } }
|
1 2 3 4 5 6
| # 如果引入了Springcloud alibaba 依赖,可以找下里面是否有rabbitMQ 的依赖 # 然后直接引入 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency>
|