看看吧!月薪20K以上的程序员才能全部掌握RabbitMq知识,你掌握了多少

本文详细介绍了RabbitMq的基础知识,包括信道、交换机、队列和消费者的概念。接着讲解了如何操作mq,如基本操作、事务、发送方确认、消息回调、接收方确认等。此外,还涉及了消息TTL、队列TTL、死信队列和延迟队列的使用。适合希望提升RabbitMq技能的Java开发者阅读。
摘要由CSDN通过智能技术生成

一、RabbitMq基础知识

0、概述

消息队列的作用就是接收消息生产者的消息,然后将消息发送到消费者

1、信道channel

我的理解是生产者/消费者和rabbitmq交互的一个通道,负责交换机、队列管理;消息发布和消费管理;事务管理等

2、交换机

四种交换机:

direct:可以用一个或者多个key绑定到一个或者多个队列上

topic:支持路由的适配符 # *

Fanout广播:将消息发送给所有的队列

Header头交换机:自定义通过头消息属性来定义路由的匹配

3、队列:保存消息的队列

4、消费者:消息的接收者

5、生产者:消息的发送者

二、 使用com.rabbitmq.client.*操作mq

2.1、基本操作

0、环境和依赖

<!-- 环境 
* jdk 1.8 
* idea
* springboot 2.2.6
-->
<!-- 依赖 这里只导入这个包,其中包含了Rabbit client的包-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

1、创建连接和信道

//获取连接
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");//mq主机地址
factory.setPort(5672);//端口,默认时5672
factory.setUsername("leyou");
factory.setPassword("leyou");
factory.setVirtualHost("/leyou");
Connection connection = factory.newConnection();
//获取信道
Channel channel = connection..createChannel();

2、申明交换机 / 队列 / 绑定交换机和队列

//交换机名,交换机类型
channel.exchangeDeclare(EXCHANGE, BuiltinExchangeType.DIRECT);
/**
* 第一个参数是queue:要创建的队列名
* 第二个参数是durable:是否持久化。如果为true,可以在RabbitMQ崩溃后恢复消息
* 第三个参数是exclusive:true表示一个队列只能被一个消费者占有并消费
* 第四个参数是autoDelete:true表示服务器不在使用这个队列是会自动删除它
* 第五个参数是arguments:包括死信队列,队列的ttl
*/
channel.queueDeclare(QUEUE_ONE,true,false,false,null);
//绑定交换机和队列  队列名,交换机名,routekey
channel.queueBind(QUEUE_ONE,EXCHANGE,GIRL);

3、发布消息

//1、交换机名 2、routekey 3、mandatory强制(需要return回调时必须设置为true) 4、发布消息参数 5、消息
channel.basicPublish(EXCHANGE,GIRL,true,null,"xxx降价了".getBytes());

4、接收消息

//接收消息前也需要获取连接和channel,申明队列
//接收消息
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"));
	}
};
/**
* 参数说明
* 1:队列名字
* 2:是否自动应答 autoACk,为false时需要手动ack
* 3:消费者,当接收到消费者时会调用给对象中的 handleDelivery 方法
*/
channel.basicConsume(QUEUE_ONE,true,consumer);

2.2、基本应用

1、功能:

有两个人小明和小华,小明对美女感兴趣,小华对股票和没事感兴趣,使用消息队列将他们感兴趣的消息发送给他们两个

2、实现:

(1)写一个类来提供创建连接和信道;
(2)生产者(发送消息方)类发送消息
(3)消费者(接收消息)类接收消息

  • 连接类
public class ConnectionUtil {
    /**
     * 使用原始的rabbitmq client api 操作mq
     */
    private static ConnectionFactory factory = new ConnectionFactory();
    private static Connection connection;
    /*
    获取连接
    注意导包:需要导client下面的包
     */
    public static Connection getConnection() throws IOException, TimeoutException {
//        factory.setHost("localhost");
//        factory.setPort(5672);
        factory.setUsername("leyou");
        factory.setPassword("leyou");
        factory.setVirtualHost("/leyou");
        connection = factory.newConnection();
        return connection;
    }

    public static void close() throws IOException {
        connection.close();
    }
    /*
    创建信道
     */
    public static Channel getChannel() throws IOException, TimeoutException {
        return getConnection().createChannel();
    }
}

  • 生产者
//生产者
public class provice{

    public void producerMsg() throws IOException, TimeoutException, InterruptedException {
        Channel channel = ConnectionUtil.getChannel();
        String EXCHANGE = "direct_exchange";
        channel.exchangeDeclare(EXCHANGE, BuiltinExchangeType.DIRECT);
        //定义两个队列名
        String QUEUE_ONE = "beauty_queue";
        String QUEUE_TWO = "food_queue";
        channel.queueDeclare(QUEUE_ONE,true,false,false,null);
        channel.queueDeclare(QUEUE_TWO,tru
作为一个月薪一万的后端程序员,需要掌握以下几个项目和技能: 1. 基本项目:熟悉常见的后端开发框架,如Spring、Django、Express等,可以独立完成简单的Web应用开发。 2. 数据库管理:了解关系型数据库(如MySQL、PostgreSQL)和非关系型数据库(如MongoDB、Redis)的使用和性能优化。 3. 接口开发和管理:熟悉RESTful API设计和开发,了解常用的API管理工具,如Swagger。 4. 安全性和权限控制:了解常见的安全漏洞和攻击手段,并能够使用相关技术保证系统的安全性,如加密、身份验证、访问控制等。 5. 性能优化:具备基本的性能优化意识,能够对数据库查询、接口响应等进行分析和优化。 6. 消息队列与异步处理:了解消息队列的基本概念和使用场景,掌握至少一种消息队列系统(如RabbitMQKafka),并能够使用异步处理提高系统性能。 7. 缓存技术:熟悉缓存的使用,如Redis、Memcached等,能够根据业务场景合理使用缓存提升系统性能。 8. 分布式系统与微服务架构:了解分布式系统的基本原理,熟悉微服务架构的设计和开发,能够使用容器化技术如Docker进行部署。 9. 版本控制和协作工具:熟练使用Git进行代码版本控制,并了解协作工具如JIRA、Slack等的使用。 以上是一个基本的要求,实际上具体需要掌握的项目和技能可能会根据不同公司和职位要求有所不同。不过,以上列举的技能是后端程序员工作中常见且重要的技能,掌握它们可以帮助你在后端开发领域有较好的表现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值