普通Maven整合RabbitMQ测试

创建Maven项目

添加依赖

   <dependency>
      <groupId>com.rabbitmq</groupId>
      <artifactId>amqp-client</artifactId>
      <version>4.5.0</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.7.25</version>
    </dependency>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
      <version>3.3.2</version>
    </dependency>

创建日志配置文件 log4j.properties

log4j.rootLogger=DEBUG,A1 log4j.logger.com.taotao = DEBUG 
log4j.logger.org.mybatis = DEBUG
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c]-[%p] %m%n

创建一个类 ConnectionUtil

package com.jq.ConnectionUtil;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
public class ConnectionUtil {

    public static Connection getConnection() throws Exception {
        //定义连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        // 设置服务地址
        factory.setHost("192.168.230.135");
        //端口
        factory.setPort(5672);
        // 设置账号信息,用户名、密码、vhost
        factory.setVirtualHost("root");
        factory.setUsername("root");
        factory.setPassword("root");
        //factory.setHandshakeTimeout(60000); //启动报错释放,连接超时的问题
        // 通过工程获取连接
        Connection connection = factory.newConnection();
        return connection;
    }

     //发送消息
    public static void main(String[] argv) throws Exception {
        // 获取到连接以及mq通道
        Connection connection = ConnectionUtil.getConnection();
        System.out.println(connection);
        // 相当于数据库中的创建连接
        // 从连接中创建通道
        Channel channel = connection.createChannel();
        // 相当于数据库中的 statement
        // 声明(创建)队列,如果存在就不创建,不存在就创建
        // 参数1 队列名,
        // 参数2 durable: 是否持久化, 队列的声明默认是存放到内存中的,如果rabbitmq重启会丢失,如果想重启之后还存在就要使队列持久化,保存到Erlang自带的Mnesia数据库中,当rabbitmq重启之后会读取该数据库
        // 参数3 exclusive:是否排外的,有两个作用,一:当连接关闭时connection.close()该队列是否会自动删除; 二:该队列是否是私有的private,如果不是排外的,可以使用两个消费者都访问同一个队列,没有任何问题,如果是排外 的,会对当前队列加锁,其他通道channel是不能访问的,如果强制访问会报异常: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=405, reply-text=RESOURCE_LOCKED - cannot obtain exclusive access to locked queue 'queue_name' in vhost '/', class-id=50, method-id=20)一般等于true的话 用于一个队列只能有一个消费者来消费的场景
        // 参数4 autoDelete:是否自动删除,当最后一个消费者断开连接之后队列是否自动被删除,可以通过RabbitMQ Management,查看某个队列的消费者数量,当consumers = 0时队列就会自动删除
        // 参数5 arguments:  参数
        //channel.queueDeclare("query", false, false, true, null);
        // 消息内容
        String message = "Hello World!";
        // 参数1 交换机,此处无
        // 参数2 发送到哪个队列
        // 参数3 属性
        // 参数4 内容
        channel.basicPublish("", "query", null, message.getBytes());
        // 将消息发动到数据库
        System.out.println(" 发送数据 '" + message + "'");
        //关闭通道和连接
        channel.close();
        connection.close();
    }

//消费消息
 public static void main(String[] argv) throws Exception {
        //创建一个新的连接
        Connection connection = ConnectionUtil.getConnection();
        //创建一个通道
        Channel channel = connection.createChannel();

        //声明要关注的队列
        //channel.queueDeclare("queue1", false, false, false, null);
        //DefaultConsumer类实现了Consumer接口,通过传入一个频道,
        // 告诉服务器我们需要那个频道的消息,如果频道中有消息,就会执行回调函数handleDelivery
        Consumer consumer = new DefaultConsumer(channel) {
            public void handleDelivery(String consumerTag, Envelope envelope,
                                       AMQP.BasicProperties properties, byte[] body)
                    throws IOException {
                String message = new String(body, "UTF-8");
                System.out.println("Customer Received '" + message + "'");
            }
        };
        //自动回复队列应答 -- RabbitMQ中的消息确认机制
        channel.basicConsume("query", true, consumer);
    }

}

启动
在这里插入图片描述
页面查看
在这里插入图片描述
注:参数对应
在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Spring Boot是一种用于快速开发应用程序的框架,它为构建基于微服务的应用提供了许多有用的功能。RabbitMQ是一个流行的开源消息队列,它可以协助应用程序在分布式环境中进行通信和协作。 在Spring Boot应用程序中,我们可以使用Spring AMQP来整合RabbitMQ。下面是一些步骤,可以帮助您在Spring Boot应用程序中整合RabbitMQ。 1.添加依赖 在您的Spring Boot项目中添加以下Maven依赖项: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> ``` 这将为您的应用程序提供Spring AMQP的依赖项,包括RabbitMQ客户端库。 2.配置RabbitMQ 在您的应用程序中,您需要配置RabbitMQ连接信息。您可以在application.properties或application.yaml文件中添加以下属性: ``` spring.rabbitmq.host=your-rabbitmq-host spring.rabbitmq.port=5672 spring.rabbitmq.username=your-rabbitmq-username spring.rabbitmq.password=your-rabbitmq-password ``` 您也可以使用@Configuration类来配置RabbitMQ连接信息。在这种情况下,您需要创建一个@Bean方法,该方法返回一个ConnectionFactory实例: ``` @Configuration public class RabbitMQConfig { @Value("${spring.rabbitmq.host}") private String host; @Value("${spring.rabbitmq.port}") private int port; @Value("${spring.rabbitmq.username}") private String username; @Value("${spring.rabbitmq.password}") private String password; @Bean public ConnectionFactory connectionFactory() { CachingConnectionFactory connectionFactory = new CachingConnectionFactory(); connectionFactory.setHost(host); connectionFactory.setPort(port); connectionFactory.setUsername(username); connectionFactory.setPassword(password); return connectionFactory; } } ``` 3.发送消息 要发送消息,您需要创建一个RabbitTemplate实例,并使用它将消息发送到RabbitMQ队列。以下是一个示例发送消息的代码: ``` @Autowired private RabbitTemplate rabbitTemplate; public void sendMessage(String message) { rabbitTemplate.convertAndSend("my-queue", message); } ``` 在上面的代码中,我们将消息发送到名为“my-queue”的队列中。 4.接收消息 要接收消息,您需要创建一个消息侦听器。Spring AMQP提供了@RabbitListener注释,您可以使用它将方法标记为RabbitMQ的消息侦听器。以下是一个示例消息侦听器的代码: ``` @RabbitListener(queues = "my-queue") public void receiveMessage(String message) { System.out.println("Received message: " + message); } ``` 在上面的代码中,我们将侦听名为“my-queue”的队列,并在接收到消息时打印它们。 总结 在本文中,我们介绍了如何在Spring Boot应用程序中整合RabbitMQ。我们覆盖了配置RabbitMQ连接信息、发送消息和接收消息的步骤。通过这些步骤,您可以轻松地在Spring Boot应用程序中使用RabbitMQ进行消息传递。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jq1223

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值