首页 > 代码库 > 消息中间件
消息中间件
1.消息中间件简介
消息中间件是在消息的传输过程中保存消息的容器。消息中间件在将消息从它的源中继到它的目标时充当中间人的作用。队列的主要目的是提供路由并保证消息的传递,如果发送消息时接受者不可用,消息队列会保留消息,知道可以成功传递它为止,当然,消息队列保持消息也是有期限的。
2.消息中间件特点
- 采用异步处理模式
消息发送者可以发送一个消息而无须等待响应。消息发送者将消息发送到一条虚拟的通道(主题或队列
上,消息接受者则订阅或是监听通道。
- 应用程序和应用程序调用关系为松耦合关系
发送者和接受者不必了解对方、只需要确认消息
发送者和接受者不必同时在线
3.消息传递服务模型
4.消息队列的作用
解耦,异步,缓冲,收集,队列,存储
5.消息中间件的传递模型
- 点对点模型(PTP)
每个消息只用一个消费者
发送者和接受者没有时间依赖
接受者确认消息接受和处理成功
- 发布-订阅模型(Pub/Sub)
每个消息可以有多个订阅者
客户端只有订阅后才能接收消息
持久订阅和非持久订阅
6.发布-订阅模型特点
- 发布者和订阅者有时间依赖:接受者和发布者只有建立订阅关系才能收到消息
- 持久订阅:订阅关系建立后,消息就不会消失,不管订阅者是否都在线
- 非持久订阅:订阅者为了接受消息,必须一直在线,当只有一个订阅时约等于点对点模式
7. 互联网消息中间件应用场景
1.网站用户注册,注册成功后会发送邮件确认或短信(异步)
填写注册信息--用户注册服务--消息中间件--邮件服务|短信服务
2.日志进行集中收集,用于计算PV,用户行为分析
应用服务|应用服务|--消息中间件--pv分析服务|行为分析服务
3.数据复制
将数据从源头复制到多个目的地,一般是要求顺序或者保证因果序列
用于跨机房数据传输、搜索、离线数据计算
DB--DB Sync--Broker--Search|hadoop|DB
4. 延迟消息发布和暂存
把消息中间件当成可靠的消息暂存地
定时进行消息投递,比如模拟用户秒杀访问,进行系统性能压测
5.消息广播
缓存数据同步更新
往应用推送数据
8.消息中间件分类
1.推消息模型(push):消息生产者将消息发送给消息传递服务,消息传递服务又将消息推给消费者--场景:交易,注册
2.拉消息模型(pull):消费者请求消息服务接受消息,消息生产者从消息中间拉该消息--场景:行为分析,PV计算
9.metaq消息中间件(pull)
metaq是一款完全的队列模型消息中间件,服务器使用java语言编写,可在多种软硬件平台上部署。客户端支持java/c++编程语言。单台服务器可支持1万以上各消息队列,通过扩容服务器,队列数几乎可任意横向扩展。每个队列都是持久化,长度无限(取决于磁盘空间大小),并且可从队列任意位置开始消费
官网:http://metaq.taobao.org
10.metaq特点
1.生产者、服务器和消费者都可分布式
2.消息存储顺序读写
3.性能极高,吞吐量大
4.支持消息顺序
5.客户端pull,随机读,批量拉数据
6.数据迁移,扩容对用户透明
7.消费状态保存在客户端
11.rabbitMQ
是一个在AMQP协议标准基础上完整的,采用Erlang实现的工业级的消息队列MQ服务器
12.rabbitMQ架构--运行原理
13.rabbitMQ重要术语
14.rabbitMQ常用配置介绍
一般情况下,rabbitMQ的默认配置就足够了,如果希望特殊配置的话,有2个途径
1.环境变量的配置文件rabbitmq-env.conf
2.配置信息的配置文件rabbitmq.config
注意,这2个文件默认是没有的,如果需要必须自己创建
1.rabbitmq-env.conf这个文件的位置是确定和不能改变的,位于:/etc/rabbitmq目录下,这个目录需要自己创建
rabbitmq_node_ip_address:指定ip地址rabbitmq_node_port:指定端口号,more5672rabbitmq_config_file:配置文件的路径,注意配置文件后缀必须是.configrabbitmq_log_base:日志文件路径
2.rabbitmq.config这是一个标准的erlang配置文件,它必须符合erlang配置文件的标准。erlangtuple,结构为{key,value},key为atm类型,value为一个term,其中关键参数为:
1.tcp_listerners设置rabbimq的监听端口,默认为56722.disk_free_limit磁盘低水位线,鄀磁盘容量低于指定值则停止接收数据3.vm_memory_high_watemark,设置内存低水位线,若低于该水位线,则开启流控机制,默认值是0.4,即内存总量的40%
15.rabbitMQ安装
wget http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpmrpm -ivh epel-release-6-8.noarch.rpmyum install rebbitmq-server -y/usr/lib/rabbitmq/bin/rabbitmq-plugins list/usr/lib/rabbitmq/bin/rabbitmq-plugins enable rabbitmq_management/etc/init.d/rabbitmq-server startrabbitmqctl add_vhost test # 创建vhostrabbitmqctl delete_vhost test # 删除vhostrabbitmqctl list_vhosts # 遍历所有虚拟主机信息rabbitmq ad_user test test # 添加用户及密码rabbitmqctl set_permissions -p v_host test test ".*" ".*" "".* # 绑定权限,并且具备读写的权限rabbitmqctl list_queues -p test # 显示所有队列
消息中间件