rabbitMq学习笔记整理(1)

1:概念整理

1.1:应用场景:异步处理,应用解耦,流量削锋和消息通讯四个场景

1.2:使用较多的消息队列有:ActiveMQ, RabbitMQ, Kafka(专供大数据的)

这三个执行速度 kafka最快,其次是rabbitMq,最慢的是activityMq;

最安全的是activityMq,然后是rabbitMq,最后是kafka;

也就是谁快,谁就不安全,哪一个慢,就越安全;

一般我们都选择rabbitMq。

1.3:重要关键词

RoutingKey:(Routing-路由)

是消息队列的key值;就是我的消息队列有123456啊,每一个都得有一个唯一标识。

那么我这个交换器如何去连这个队列呢?它就是用过这个RoutingKey来连接。

2:安装

2.1:windows下安装RabbitMQ

步骤:

1:下载并安装 eralng

由于RabbitMQ依赖Erlang, 所以需要先安装Erlang。直接下一步下一步就可以了;

2:下载并安装rabbitmq

双击安装,注意不要安装在包含中文和空格的目录下!安装后window服务中就存在rabbitMQ了,并且是启动状态

3:安装管理页面(插件)

因为rabbitmq他自身是提供了管理界面的。

进入rabbitMQ安装目录的sbin目录,输入命令

rabbitmq‐plugins enable rabbitmq_management

4:重新启动服务

5:打开浏览器,地址栏输入http://127.0.0.1:15672 ,即可看到管理界面的登陆页

输入用户名和密码,都为guest 进入主界面

最上侧的导航以此是:概览、连接、信道、交换器、队列、用户管理

 

rabbitMq学习笔记整理(1)_第1张图片

这个管理界面中对我们有用的就是交换器和队列,其他的是他自己内部的一些监控,不用管。

Exchange:我们要往队列中发消息是要经过交换器的。

Queue:(队列)是RabbitMQ的内部对象,用于存储消息。

添加队列的一些关键词:

Durability:是否做持久化 Durable(持久)

transient(临时)

Auto delete : 是否自动删除

3:三种模式

直接模式-direct

分裂模式-fanout

主题模式-topic

直接模式:我们需要将消息发给唯一一个节点时使用这种模式,这是最简单的一种形式;其实就是点对点

                可以理解直接模式就是没有用交换器(也可以这样理解)

分裂模式:当我们需要将消息一次发给多个队列时,需要使用这种模式。就是一对多

             每次固定的往所有的队列里面发,是所有的队列。

主题模式:我们可以认为主题模式是分裂模式的一个加强版;

             可以选择性的往某一个,或者某两个队列里面去发,就是靠RoutingKey。

 

接下来就是写几个简单的demo,来测试下这几个模式

我用的是springboot整合rabbitMq,因此这块写上我的步骤:


			org.springframework.boot
			spring-boot-starter-amqp
		

		
			org.springframework.boot
			spring-boot-starter-test
			test
		

直接模式demo:

@RunWith(SpringRunner.class)
@SpringBootTest(classes=RabbitMqApplication.class)
public class ProductTest {	
    @Autowired
	private RabbitTemplate rabbitTemplate;
	
	@Test
	public void testSend(){
		rabbitTemplate.convertAndSend("test","直接模式测试");
	}
}

在图形管理界面,直接新建一个队列,名称叫test

rabbitMq学习笔记整理(1)_第2张图片

点击单元测试,即可在控制台看到打印结果。

分裂模式demo:

其实分列模式就是建立队列的时候,在建立一个交换器,并且把交换器绑定到这些队列(不指定RouteKey),

发送到绑定的所有队列。

主题模式:

主题模式和分裂模式的区别不大,只不过他绑定的时候多了一个匹配这个rountingkey的规则。

就是类似于mysql中的模糊匹配。

交换器说到底是一个名称与队列绑定的列表

当消息发布到交换器时,实际上是由你所连接的信道,将消息路由键同交换器上绑定的列表进行比较,最后路由消息。

如果Exchange没有发现能够与RouteKey匹配的Queue,则会抛弃此消息。

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(RabbitMq,rabbitMq)