当前位置: 代码网 > it编程>编程语言>Java > RabbitMQ最全使用教程-小白也能看懂

RabbitMQ最全使用教程-小白也能看懂

2024年07月28日 Java 我要评论
我还通过一些渠道整理了一些大厂真实面试主要有:蚂蚁金服、拼多多、阿里云、百度、唯品会、携程、丰巢科技、乐信、软通动力、OPPO、银盛支付、中国平安等初,中级,高级Java面试题集合,附带超详细答案,希望能帮助到大家。还有专门针对JVM、SPringBoot、SpringCloud、数据库、Linux、缓存、消息中间件、源码等相关面试题。

1、队列: 点对点的通信(point - to - point): 消息发送者发送消息,消息代理将其放入到一个队列中,消息接收者从队列中获取消息内容,消息读取后被移除出队列。

点对点模式

2、主题: 发布publish/订阅subscribe 消息通信: 发布者发送消息到主题,多个接收者(订阅者)订阅这个主题,那么就会在消息到达时同时收到消息

发布-订阅模式

(三) rabbitmq的核心概念

1、message(消息): 不具名,由消息头和消息体租出,消息体是不透明的。消息头是由一系列的可选属性组成如,routing-key路由键,priority-相对其他消息的优先权,delivery-mode-指出该消息是否需要永久存储等。

2、publicsher(消息的生产者): 是向交换器发布消息的客户端应用程序。

3、exchange(交换器): 用来接受消息并且消息路由给服务器中的队列,有四种类型,即决定消息发布到那个队列,具体有以下的类型:

(1)、direct:消息中的路由键(routingkey),如果和binding中的binding key 一致,那么就将消息发到对应的队列中。

(2)、fanout类型: 即广播模式,每个发送到fanout类型的交换器消息,交换器会将消息发送到它绑定的所有队列中,它转发消息是最快的。

(3)、topic:主题,可以设置模糊匹配,会识别"#“和”*"号,#表示匹配0个或者多个单词,*匹配一个单词,单词之间使用:逗号隔开。

(4)、headers:实现发布订阅模型(基本不使用了)。

4、queue(消息队列): 消息的容器,一个消息可以放在一个或者多个队列中。

5、binding(绑定): 用于消息队列和交换器之间的关联,一个绑定就是基于路由键将交换机和消息队列连接起来的路由规则,交换器跟队列的绑定可以是多对多的关系

6、connection(网络连接): 如一个tcp连接。

7、channel(信道): 多路复用连接中的一条独立的双向数据流通道,信道是建立在真实的tcp连接内的虚拟通道,amqp命令都是通过信道发出去的,不管是发布消息,订阅队列,还是接收消息,都是通过信道完成,因为对于操作系统来说创建和销毁一个tcp连接都是很昂贵的开销,所以使用信道以实现复用一条tcp连接。

8、consumer(消费者): 接受和消费消息。

9、virtaul hos(虚拟主机): 即小型的rabbitmq服务器,它表示一批交换器,消息队列和相关对象,连接时必须指定,默认是:/(以路径区分)。

10、broker: 消息队列服务器实体。

rabbitmq核心概念

五: spring如何整合rabbitmq?

(一) 添加依赖

org.springframework.boot

spring-boot-starter-amqp

2.2.1.release

(二) 设置配置信息

spring:

application:

name: rabbitmq-test # 应用名称

rabbitmq:

host: localhost #rabbitserver的地址

port: 5672 # 端口

username: guest # 用户名称

password: guest # 连接密码

virtual-host: /

server:

port: 9090

(三) 启动类添加enablerabbit注解

@springbootapplication

@enablerabbit

public class rabbitmqtestapplication {

public static void main(string [] args){

springapplication.run(rabbitmqtestapplication.class,args);

}

}

六: 如何通过代码操作rabbitmq?

注: 因为本篇文章到此处已经是比较长了,考虑到大家的阅读时间,所以rabbitmq的操作的具体参数会另起一片文章做详细的讲解,需要了解操作参数的详细含义的,可以点击文章末尾的连接跳转,谢谢理解。

(一) spring提供操作rabbitmq的工具类

1、rabbittemplate: 是spring集成rabbitmq而提供的一个工具类,跟jdbctemplate一样,可以通过它进行消息的发送和接收。

2、rabbitadmin : 主要用于管理交换机和队列的信息。

(二) 测试的公共执行代码

// 测试前加载rabbitadmin

private static amqpadmin amqpadmin;

private static connectionfactory connectionfactory;

@beforeclass

public static void loadneedbean(){

com.rabbitmq.client.connectionfactory connfactory = new com.rabbitmq.client.connectionfactory();

connfactory.sethost(“47.91.198.211”);

connfactory.setport(5672);

connfactory.setusername(“guest”);

connfactory.setpassword(“guest”);

connfactory.setvirtualhost(“/”);

connectionfactory = new cachingconnectionfactory(connfactory);

// rabbitadmin 主要用于管理交换机和队列的信息

amqpadmin = new rabbitadmin(connectionfactory);

}

(三) 操作交换机(exchange)

// 交换机操作

@test

public void rabbitexchangetest() throws exception{

// 创建交换机

// 参数分别是: 交换机名称,是否持久化,是否自动删除

exchange exchange = new directexchange(“direct_test”,true,false);

amqpadmin.declareexchange(exchange);

// 删除交换机

amqpadmin.deleteexchange(“direct_test”);

}

(四) 操作队列(queue)

// 操作队列

@test

public void rabbitexchangeandqueuetest() throws exception{

// 创建队列

queue queue = new queue(“queue_test111”);

amqpadmin.declarequeue(queue);

// 删除队列

amqpadmin.deletequeue(“queue_test111”);

}

(五) 交换机和队列的绑定

// 队列和交换机操作

@test

public void rabbitqueuetest(){

// 创建交换机

exchange exchange = new directexchange(“direct_test2”,true,false);

amqpadmin.declareexchange(exchange);

// 创建队列

queue queue = new queue(“queue_test”,true);

amqpadmin.declarequeue(queue);

// 绑定交换机交换机

//binding binding = new binding(“direct_test2”, binding.destinationtype.exchange,“direct_test2”,“rount-key”,null);

// 队列绑定到交换机

binding binding = new binding(“queue_test”, binding.destinationtype.queue,“direct_test2”,“rount-key”,null);

amqpadmin.declarebinding(binding);

}

(六) 消息生产者发送消息到消息队列中

@test

public void messageproducttest(){

// 消息操作模板

rabbittemplate rest = new rabbittemplate(connectionfactory);

messageproperties messageproperties = new messageproperties();

messageproperties.setcontenttype(messageproperties.content_type_json);

// 发送消息方式一

string msg = “hello world”;

message message = new message(msg.getbytes(),messageproperties);

// 发送消息方式二

hashmap map = new hashmap();

map.put(“key”,“value”);

rest.convertandsend(“direct_test2”,“rount-key”,map);

}

(七) 消息消费者从队列中消费(手动执行的方式)

// 消息的消费者

@test

public void messageconsumertest() throws exception{

rabbittemplate rest = new rabbittemplate(connectionfactory);

// 从名为queue_test的队列中获取消息

message queue_test = rest.receive(“queue_test”);

system.out.println(new string(queue_test.getbody(),“utf-8”));

}

最后

我还通过一些渠道整理了一些大厂真实面试主要有:蚂蚁金服、拼多多、阿里云、百度、唯品会、携程、丰巢科技、乐信、软通动力、oppo、银盛支付、中国平安等初,中级,高级java面试题集合,附带超详细答案,希望能帮助到大家。

新鲜出炉的蚂蚁金服面经,熬夜整理出来的答案,已有千人收藏

还有专门针对jvm、springboot、springcloud、数据库、linux、缓存、消息中间件、源码等相关面试题。

新鲜出炉的蚂蚁金服面经,熬夜整理出来的答案,已有千人收藏

essage queue_test = rest.receive(“queue_test”);

system.out.println(new string(queue_test.getbody(),“utf-8”));

}

最后

我还通过一些渠道整理了一些大厂真实面试主要有:蚂蚁金服、拼多多、阿里云、百度、唯品会、携程、丰巢科技、乐信、软通动力、oppo、银盛支付、中国平安等初,中级,高级java面试题集合,附带超详细答案,希望能帮助到大家。

[外链图片转存中…(img-wedjtab4-1714057288193)]

还有专门针对jvm、springboot、springcloud、数据库、linux、缓存、消息中间件、源码等相关面试题。

[外链图片转存中…(img-8kecq3tk-1714057288194)]

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com