RabbitMQ简单生产者和消费者实现

1.公共模块

pom引入依赖

复制代码
    <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-amqp</artifactId>
    </dependency>

新增RabbitMQConfig.java

复制代码
import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RabbitMqConfig2 {
    /**
     * direct交换机名称
     */
    public static final String DIRECT_EXCHANGE = "directExchange";

    /**
     * direct队列名称
     */
    public static final String DIRECT_QUEUE = "directQueue";

    public static final String DIRECT_ROUTING_KEY = "directRoutingKey";
    /**
     * 定义一个direct交换机
     * @return
     */
    @Bean
    public DirectExchange directExchange(){
        return new DirectExchange(DIRECT_EXCHANGE);
    }

    /**
     * 定义一个direct队列
     * @return
     */
    @Bean
    public Queue directQueue(){
        return new Queue(DIRECT_QUEUE);
    }

    @Bean
    public Binding directBinding(){
        return BindingBuilder.bind(directQueue()).to(directExchange()).with(DIRECT_ROUTING_KEY);
    }


}

Queue有几个重载方法,其中几个参数:

  • durable:是否持久化,值为true时交换机或者队列会存到本地文件数据库,当mq重启数据不会丢失,false的话,重启或者断电,数据就没了。默认为true。
  • exclusive:是否独占,true的话只有一个消费者监听这个队列。默认为false。
  • autoDelete:是否自动删除,true当没有消费者的时候,自动删除。默认为false。

2、生产者Producer实现

pom引入共公模块。

application.yml配置

复制代码
server:
  port: 8081
spring:
  rabbitmq:
    host: 192.168.19.183
    port: 5672
    username: guest
    password: guest
    virtual-host: /
  • rabbitmq.host修改为自己的服务器ip
  • username和password修改为自己对应的账号密码。
  • virtual-host默认 /

定义接口RabbitMqService

复制代码
public interface RabbitMqService {

    public void sendMessage(String message);

}

实现类RabbitMqServiceImpl

复制代码
import com.example.config.RabbitMqConfig;
import com.example.service.RabbitMqService;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service("rabbitMqService")
public class RabbitMqServiceImpl implements RabbitMqService {

    @Autowired
    private AmqpTemplate amqpTemplate;

    /**
     * exchange 交换机名称
     * routingkey 路径key
     * @param message
     */
    @Override
    public void sendMessage(String message) {
        amqpTemplate.convertAndSend(RabbitMqConfig.DIRECT_EXCHANGE,RabbitMqConfig.DIRECT_ROUTING_KEY,message);
    }

   
}

启动类中测试投递消息

复制代码
@SpringBootApplication
public class ProducerMain {

    public static void main(String[] args) {
        ApplicationContext run = SpringApplication.run(ProducerMain.class);
        RabbitMqService rabbitMqService = (RabbitMqService)run.getBean("rabbitMqService");
        rabbitMqService.sendMessage("hello rabbitmq");
    }
}

可登录控制台查看相关信息

3、消费者Consumer实现

引入公共模块。

application.yml配置

rabbitmq的配置与生产者一致

复制代码
server:
  port: 8080
spring:
  rabbitmq:
    host: 192.168.19.183
    port: 5672
    username: guest
    password: guest
    virtual-host: /

定义接口RabbitMqService

复制代码
public interface RabbitMqService {
    
    public void receiveMessage();
}

实现类RabbitMqServiceImpl

复制代码
@Service("rabbitMqService")
public class RabbitMqServiceImpl implements RabbitMqService {

    @Autowired
    private AmqpTemplate amqpTemplate;

    @Override
    public void receiveMessage() {
        String msg = (String)amqpTemplate.receiveAndConvert(RabbitMqConfig.DIRECT_QUEUE);
        System.out.println("接受到的mq消息:"+msg);

    }
}

测试调用接口获取消息

复制代码
    public static void main(String[] args) {
        ApplicationContext run = SpringApplication.run(CustmoerMain.class);
        RabbitMqService rabbitMqService = (RabbitMqService)run.getBean("rabbitMqService");
        rabbitMqService.receiveMessage();
    }
}

运行消费者程序,输出结果:

使用监听方式:

复制代码
   @Override
    @RabbitListener(queues = {RabbitMqConfig.DIRECT_QUEUE})
    public void receiveMessage2(String message) {
        System.out.println("实时获取到的mq消息:"+message);
    }

生产者重新发消息,然后验证消费者是否能获取

相关推荐
步步为营DotNet40 分钟前
深度解析CancellationToken:.NET中的优雅取消机制
java·前端·.net
JH30739 小时前
SpringBoot 优雅处理金额格式化:拦截器+自定义注解方案
java·spring boot·spring
Coder_Boy_10 小时前
技术让开发更轻松的底层矛盾
java·大数据·数据库·人工智能·深度学习
invicinble10 小时前
对tomcat的提供的功能与底层拓扑结构与实现机制的理解
java·tomcat
较真的菜鸟11 小时前
使用ASM和agent监控属性变化
java
黎雁·泠崖11 小时前
【魔法森林冒险】5/14 Allen类(三):任务进度与状态管理
java·开发语言
qq_124987075312 小时前
基于SSM的动物保护系统的设计与实现(源码+论文+部署+安装)
java·数据库·spring boot·毕业设计·ssm·计算机毕业设计
Coder_Boy_12 小时前
基于SpringAI的在线考试系统-考试系统开发流程案例
java·数据库·人工智能·spring boot·后端
Mr_sun.12 小时前
Day06——权限认证-项目集成
java
瑶山12 小时前
Spring Cloud微服务搭建四、集成RocketMQ消息队列
java·spring cloud·微服务·rocketmq·dashboard