rabbitmq基础

RabbitMq

为什么中间件能够削封

串行执行:是所有操作都一次执行最终完成时间所有流程时间总和
并行执行:将各部操作由多线程并行操作,各步骤完成时间最长为单步最长时间
中间件进行削峰主要是,消息中间件能够将大量并发的消息存到自己的消息队列中,然后快速稳定的让消费方进行消费处理

消息中心协议(amqp)

各种中间件必须遵守的一种规范TCP/UDP
1.长链接
2.分布式事务支持
3.消息持久化
4.高性能和高可靠

消息中心的消息分发策略

1.发布订阅:队列中有100条消息,没有个订阅的消费者都能够收到100条消息
2.轮询分发:队列中有100条消息,会轮询依次送给三个消费者消费,没各消费者最少33条,剩下一条随机分给一个消费者
3.公平分发:队列中有100条消息,会根据消费者的性能进行分发,性能强的消费者就能够消费更多的消息,会造成消息的倾斜
4.重发:如果发送给消费者的消息没有的到消费相应,则会重新发送该消息给其他消费者

集群

1.主从同步(消息同步)
2.主从共享(消息共享)
3.多主多从
4.多主集群转发部署(元数据共享)

消息的工作流程

1.创建连接
2.创建通道
3.创建交换机
4.创建队列
5.将消息通过交换机推送到队列
5.队列通过routeKey进行消息分发给消费者

交换机工作模式

fanout

绑定的全部队列都会收到消息

direct

在fanout的基础上为每个队列添加了路由key,交换机发送消息是需要带上路由key,指定路由key的队列才会接收到消息

topic

在direct基础上添加了模糊匹配
*一级匹配,必须有一级
#多级匹配

Headers

配置参数模式

用代码方式实现连接、通道获取、队列创建、交换机创建、队列绑定交换机、消息发送、消息消费

连接

//创建连接工程
        ConnectionFactory connectionFactory = new ConnectionFactory();
        connectionFactory.setHost("localhost");
        connectionFactory.setPort(5672);
        connectionFactory.setUsername("guest");
        connectionFactory.setPassword("guest");
        connectionFactory.setVirtualHost("/");
				connection = connectionFactory.newConnection("生产者");

通道获取

//创建通道
             channel = connection.createChannel();

队列创建

//@param1 queueName 队列名
//@param2 持久化
channel.queueDeclare(queueName,true,false,false,null);

交换机创建

//param1 交换机名
//param2 交换机类型
channel.exchangeDeclare(exchangeName,type,true);

队列与交换机的绑定

//param1 队列名
//param1 交换机名
//param3 路由key
channel.queueBind(queueName,exchangeName,routeKey);

向交换机推送消息

//param1 交换机名
//param1 路由key
//param3 
//param4 消息内容
channel.basicPublish(exchangeName,routeKey,null,message.getBytes());

消费消息

//param1 队列名
//param2 自动确认
//param3 订阅执行的方法
//param4 取消订阅到执行的方法
channel.basicConsume(queueName, true, new DeliverCallback() {
                    @Override
                    public void handle(String s, Delivery delivery) throws IOException {
                        System.out.println(queueName+"收到的消息:"+new String(delivery.getBody(),"UTF-8"));
                    }
                }, new CancelCallback() {
                    @Override
                    public void handle(String s) throws IOException {
                       
                    }
                });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值