【RabbitMQ】4、Java中整合RabbitMQ的使用

简介: 本次,我们以IDEA + SpringBoot作为 Java中整合Redis的使用 的测试环境。

一、引入 MQ 的依赖

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
  <groupId>com.rabbitmq</groupId>
  <artifactId>amqp-client</artifactId>
</dependency>

二、配置文件中写入 MQ 的配置信息

#rabbitmq 配置信息
spring:
  rabbitmq:
    host: 127.0.0.1
    port: 5672
    username: guest
    password: guest

三、创建生产者

package com.zyxx.rabbitmq.entity;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
/**
 * @ClassName producer
 * 生产者
 * @Author Lizhou
 * @Date 2019-08-02 9:54:54
 * @Version 1.0
 **/
public class ProducerTest {
    public static void main(String[] args) {
        // 创建一个连接工厂,用于生成与RabbitMQ进行连接
        ConnectionFactory factory = new ConnectionFactory();
        // 根据这个连接工厂设置RabbitMQ所在的主机,账号密码和端口号等(默认情况下就不需要账号密码和端口了)
        factory.setHost(MqEntity.HOST);
        factory.setUsername(MqEntity.USERNAME);
        factory.setPassword(MqEntity.PASSWORD);
        try {
            // 由连接工厂生成与RabbitMQ的连接
            Connection connection = factory.newConnection();
            // 创建一条通道
            Channel newChannel = connection.createChannel();
            // 由这个通道声明一个队列
            newChannel.queueDeclare(MqEntity.QUEUENAME, false, false, true, null);
            // 要发送的消息
            String sendMessage = "Hello,我是生产者!!!";
            newChannel.basicPublish(MqEntity.EXCHANGE_NAME, MqEntity.QUEUENAME, null, sendMessage.getBytes());
            System.out.println("消息发送成功!!!");
            // 关闭通道
            newChannel.close();
            // 关闭连接
            connection.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

四、创建消费者

package com.zyxx.test;
import com.rabbitmq.client.*;
import java.io.IOException;
/**
 * @ClassName Consumer
 * 消费者
 * @Author Lizhou
 * @Date 2019-08-02 9:57:57
 * @Version 1.0
 **/
public class ConsumerTest {
    public static void main(String[] args) {
        // 创建一个连接工厂,用于生成与RabbitMQ进行连接
        ConnectionFactory factory=new ConnectionFactory();
        // 根据这个连接工厂设置RabbitMQ所在的主机,账号密码和端口号等(默认情况下就不需要账号密码和端口了)
        factory.setHost(MqEntity.HOST);
        factory.setUsername(MqEntity.USERNAME);
        factory.setPassword(MqEntity.PASSWORD);
        Connection connection;
        try {
            // 创建一条通道,通道创建好后,关联相关的队列
            connection = factory.newConnection();
            Channel newChannel = connection.createChannel();
            newChannel.queueDeclare(MqEntity.QUEUENAME, false, false, true, null);
            Consumer consumer = new DefaultConsumer(newChannel){
                // 重写handleDelivery方法
                @Override
                public void handleDelivery(String consumerTag, Envelope envelope, 
                                           AMQP.BasicProperties properties, byte[] body) throws IOException {
                    String getMessage = new String(body, "UTF-8");
                    System.out.println("接收到消息:'" + getMessage + "'");
                }
            };
            // 自动回复队列应答 -- RabbitMQ中的消息确认机制
            newChannel.basicConsume(MqEntity.QUEUENAME, true, consumer);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

五、创建 MQ 常量类

package com.zyxx.test;
/**
 * @author lizhou
 * @date 2019-08-02
 */
public final class MqEntity {
    /**
     * 队列名称
     */
    public final static String QUEUENAME="mq.test_queu1";
    /**
     * 主机名
     */
    public final  static String HOST="localhost";
    /**
     * 用户名
     */
    public final static  String USERNAME="guest";
    /**
     * 密码
     */
    public final static  String PASSWORD="guest";
    /**
     * 交换机名
     */
    public final static  String EXCHANGE_NAME="";
}
  • 六、启动生产者,发送消息

消息发送成功!!!

  • 七、启动消费者,接收消息

接收到消息:‘Hello,我是生产者!!!’

最后,你还可以创建两个 SpringBoot 项目,一边用来发,一边用来收,可实现实时通信。

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
2月前
|
消息中间件 存储 Java
RocketMQ文件刷盘机制深度解析与Java模拟实现
【11月更文挑战第22天】在现代分布式系统中,消息队列(Message Queue, MQ)作为一种重要的中间件,扮演着连接不同服务、实现异步通信和消息解耦的关键角色。Apache RocketMQ作为一款高性能的分布式消息中间件,广泛应用于实时数据流处理、日志流处理等场景。为了保证消息的可靠性,RocketMQ引入了一种称为“刷盘”的机制,将消息从内存写入到磁盘中,确保消息持久化。本文将从底层原理、业务场景、概念、功能点等方面深入解析RocketMQ的文件刷盘机制,并使用Java模拟实现类似的功能。
45 3
|
3月前
|
存储 消息中间件 安全
JUC组件实战:实现RRPC(Java与硬件通过MQTT的同步通信)
【10月更文挑战第9天】本文介绍了如何利用JUC组件实现Java服务与硬件通过MQTT的同步通信(RRPC)。通过模拟MQTT通信流程,使用`LinkedBlockingQueue`作为消息队列,详细讲解了消息发送、接收及响应的同步处理机制,包括任务超时处理和内存泄漏的预防措施。文中还提供了具体的类设计和方法实现,帮助理解同步通信的内部工作原理。
JUC组件实战:实现RRPC(Java与硬件通过MQTT的同步通信)
|
3月前
|
消息中间件 存储 JSON
rabbitmq基础教程(ui,java,springamqp)
本文提供了RabbitMQ的基础教程,包括如何使用UI创建队列和交换机、Java代码操作RabbitMQ、Spring AMQP进行消息发送和接收,以及如何使用不同的交换机类型(fanout、direct、topic)进行消息路由。
38 0
rabbitmq基础教程(ui,java,springamqp)
|
3月前
|
消息中间件 前端开发 Java
java高并发场景RabbitMQ的使用
java高并发场景RabbitMQ的使用
126 0
|
4月前
|
消息中间件 缓存 Java
RocketMQ的JAVA落地实战
RocketMQ作为一款高性能、高可靠、高实时、分布式特点的消息中间件,其核心作用主要体现在异步处理、削峰填谷以及系统解耦三个方面。
200 0
|
5月前
|
Java
MQTT(EMQX) - Java 调用 MQTT Demo 代码
MQTT(EMQX) - Java 调用 MQTT Demo 代码
204 0
MQTT(EMQX) - Java 调用 MQTT Demo 代码
|
6月前
|
消息中间件 Java Maven
如何在Java中使用RabbitMQ
如何在Java中使用RabbitMQ
|
7月前
|
消息中间件 Java
Java一分钟之-RabbitMQ:AMQP协议实现
【6月更文挑战第11天】RabbitMQ是基于AMQP协议的开源消息队列服务,支持多种消息模式。本文介绍了RabbitMQ的核心概念:生产者、消费者、交换器、队列和绑定,以及常见问题和解决方案。例如,通过设置消息持久化和确认机制防止消息丢失,配置死信队列处理不可消费消息,以及妥善管理资源防止泄漏。还提供了Java代码示例,帮助读者理解和使用RabbitMQ。通过理解这些基础和最佳实践,可以提升RabbitMQ在分布式系统中的可靠性和效率。
154 0
Java一分钟之-RabbitMQ:AMQP协议实现
|
6月前
|
消息中间件 负载均衡 Java
JAVA面试之MQ
JAVA面试之MQ
75 0
|
6月前
|
消息中间件 Java Maven
如何在Java中使用RabbitMQ
如何在Java中使用RabbitMQ