消息队列 ActiveMQ

摘要:
同时,实现了代理架构,这意味着消息在发送到客户端之前在中央队列中排队。ActiveMq:ActiveMq是Apache下的一个子项目,类似于zeroMq。它可以使用代理和点对点技术实现队列。K kafka通过Hadoop的并行加载机制统一了在线和离线消息处理。Apache kafka相当于Active

一。首先,说一下ActiveMQ在Linux的安装:

     1.下载安装包:

    下载:apache-activemq-5.14.0-bin.tar.gz

    地址http://activemq.apache.org/activemq-5140-release.html

消息队列 ActiveMQ第1张

  2.安装到Linux虚拟机上:

  1、gz文件拷贝到/usr/local/src目录

  2.解压启动:

    tar -zxvf apache-activemq-5.14.0-bin.tar.gz

    cd apache-activemq-5.14.0/bin  --->到解压过后的activemq的bin目录下启动

    ./start   启动图示:

  消息队列 ActiveMQ第2张

  查看指定端口下的activemq是否启动:

   netstat -anp|grep 61616  图示:

        消息队列 ActiveMQ第3张

   关闭 ./activemq start

3.开启防火墙端口

   参考资料:  1.编辑/etc/sysconfig/iptables文件:vi /etc/sysconfig/iptables
                   加入内容并保存:-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
               2.重启服务:/etc/init.d/iptables restart
               3.查看端口是否开放:/sbin/iptables -L -n
 
/sbin/iptables -I INPUT -p tcp --dport 9100 -j ACCEPT&&/etc/init.d/iptables save&&service iptables restart&&/etc/init.d/iptables status
/sbin/iptables -I INPUT -p tcp --dport 61616 -j ACCEPT&&/etc/init.d/iptables save&&service iptables restart&&/etc/init.d/iptables status
 

4、打开web管理页面

http://(你自己主机地址):9100/admin    账号密码默认   admin/admin
消息队列 ActiveMQ第4张

 如果需要修改密码,请前往配置文件conf/jetty-realm.properties中修改

 5.安全配置

请自行前往查看:http://activemq.apache.org/security.html
activemq.xml新增账号密码(broker标签下添加)
<plugins>
    <simpleAuthenticationPlugin>
        <users>
        <authenticationUser username="sunkukong"password="123123"           
            groups="users,admins"/>        //username和password自定义
 </users> </simpleAuthenticationPlugin> </plugins>

或者在程序代码中添加配置文件

消息队列 ActiveMQ第5张

 二.ActiveMQ的概述:

ActiveMQ 是由 Apache 出品的一款开源的,基于java中的JMS消息服务规范实现的一个消息中间件,旨在为应用程序提供高效,可拓展稳定,安全的企业级消息通信。设计目的是提供标准的,面向消息的,多语言的应用集成消息通信中间件.

三.ActiveMQ的消息传送模型

(1)点对点模型(Point to Point)

使用队列作为(Queue)作为消息通信载体,满足消费者和生产者模式,一条消息只能被一个消费者使用,消息保证送达,离线消费者可以在下次登录时接收到积压的消息

(2)发布订阅模型(Publish/Subscribe)

    使用主题作为消息通信载体   (可能会造成部分消息的丢失)

   <1>普通订阅:当前有几个消费者在线就发送几条消息给客户端

   <2>持久化订阅:区分消费者:消费者在线则直接发送消息给在线客户端,消费者不在线只要有topic登记,那么就会为其保留数据直至其登陆一次性把积压数据推送过去。

四.ActiveMQ的优势:

(1)解耦合:上层发布者不需要关心下层被调用着的使用

(2)异步调用:各个微服务调用所需要的时间不同(即时效性不一致),使用MQ的异步调用合理使用

(3)流量削峰:大型数据访问(高并发状态下),使用消息中间件,超出消息中间件设置的访问数量就会被阻挡排队等候,减小了服务器的压力

五.ActiveMQ解决分布式事务:

举例:   互联网应用中,基本都会有用户注册的功能,注册的时候会进行以下操作:

    1.收集用户信息,保存到数据库

    2.向用户的手机或者邮箱发送验证码

解决方式:

   (1)传统的集中式框架:   开启一个本地事务,在本地数据库中插入一条用户数据,发送验证码提交事务。

 (2)分布式架构中:用户注册和验证码是俩个独立的服务,它们都有各自数据库,那么就不能使用本地事务保证操作的原子性,这时就需要ActiveMq(消息队列)来实现我们的需求

   在用户进行操作的时候,我们为该操作创建一条数据,当用户消息保存成功时,把这条消息发送到消息队列,验证码系统会监听消息,一旦接收到消息,就会给用户发送验证码。

产生问题:

     如何防止消息重复发送???

答: 解决方法很简单,增加消息状态表,通俗来说就是一个账本,用来记录消息的处理状态,每次处理消息之前,都会去状态表中查询一次,如果已经有相同的消息存在,那么不处理,可以防止消息重复发送。

六.了解哪些消息队列?

ActiveMq,RabbitMQ,kafka。

RabbitMQ:   
  
RabbitMQ 是使用 Erlang 编写的一个开源的消息队列,本身支持很多的协议:AMQP,XMPP, SMTP, STOMP,
也正因如此,它非常重量级,更适合于企业级的开发。同时实现了 Broker 构架,这意味着消息在发送给客户端时先在
中心队列排队。对路由,负载均衡或者数据持久化都有很好的支持。
 
ActiveMq:
  ActiveMq是Apache下的一个子项目,类似于zeroMq,它能够以代理人和点对点的技术实现队列。同时类似于RabbitMq,它少量代码就可以高效的实现高级应用场景。
Kafka/Jafka:
    
Kafka 是 Apache 下的一个子项目,具有一个高性能跨语言分布式发布/订阅消息队列系统,而jafka是kafka上孵化而来的,是kafka的升级版。
  优势:(1)快速持久化,可以在O(1)的系统开销下进行消息持久化;
     (2)高吞吐,在一台普通的服务器上即可达到10wan/s的吞吐速率;
     (3)完全的分布式系统,Broker,Producer,Consumer都原生自动支持分布式,自动实现负载均衡;
    (4)支持Hadoop数据并行加载,对于像 Hadoop 的一样的日志数据和离线分
析系统,但又要求实时处理的限制,这是一个可行的解决方案。K
  kafka通过Hadoop的并行加载机制统一在线和离线的消息处理
  Apache kafka相当于ActiveMq是一个非常轻量级的消息系统,除了性能非常好外,还是一个工作良好的分布式系统
MQ选型比较图:
消息队列 ActiveMQ第6张

 七.ActiveMQ 如果消息发送失败怎么办?

Activemq 有两种通信方式,点到点形式和发布订阅模式。 
 
如果是点到点模式的话,如果消息发送不成功此 消息默认会保存到 activemq 服务端知道有消费者将其消费,所以消息是不会丢失的。
 
如果是发布订阅模式的通信方式,默认情况下只通知一次,如果接收不到此消息就没有了。这种场景只适 用于对消息送达率要求不高的情况。如果要求消息必须送达不可以丢失的话,需要配置持久订阅。每个订阅端定义一个 id,在订阅是向 activemq 注册。发布消息和接收消息时需要配置发送模式为持久化。此时 如果客户端接收不到消息,消息会持久化到服务端,直到客户端正常接收后为止。

2,为什么要用消息队列

  主要有两点好处:

    通过异步处理提高系统性能(削峰,减少系统响应时间):消息队列具有很好的削峰作用功能,即通过异步处理,将短时间高并发产生的事务消息存储到消息队列中,从而削平高峰时期的并发事务。

举例:在电子商务一些秒杀、促销活动中,合理使用消息队列可以有效抵御促销活动刚开始大量订单涌入对系统的冲击。

    降低系统耦合性

3,消息队列带来了哪些问题

  1,系统可用性降低

  2,系统复杂性提高

  3,一致性问题

4,JMS 两种消息模型

点到点(P2P)模型
  使用队列(Queue)作为消息通信载体;满足生产者与消费者模式,一条消息只能被一个消费者使用,未被消费的消息在队列中保留直到被消费或超时。
  比如:我们生产者发送 100 条消息的话,两个消费者来消费一般情况下两个消费者会按照消息发送的顺序各自消费一半(也就是你一个我一个的消费。)
发布/订阅(Pub/Sub)模型
  发布订阅模型(Pub/Sub) 使用主题(Topic)作为消息通信载体,类似于广播模式;发布者发布一条消息,该消息通过主题传递给所有的订阅者,在一条消息广播之后才订阅的用户则是收不到该条消息的。

5,JMS vs AMQP

AMQP 为消息定义了线路层(wire-level protocol)的协议,而 JMS 所定义的是 API 规范。在 Java 体系中,多个 client 均可以通过 JMS 进行交互,不需要应用修改代码,但是其对跨平台的支持较差。而 AMQP 天然具有跨平台、跨语言特性。
JMS 支持 TextMessage、MapMessage 等复杂的消息类型;而 AMQP 仅支持 byte[] 消息类型(复杂的类型可序列化后发送)。
由于 Exchange 提供的路由算法,AMQP 可以提供多样化的路由方式来传递消息到消息队列,而 JMS 仅支持队列 和 主题/订阅 方式两种

 

 
 
 
 
 
 
 
 

免责声明:文章转载自《消息队列 ActiveMQ》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇sqlplus客户端 navicat 使用sqlplus OCIecharts 饼图 + 全屏显示下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

kafka集群搭建(windows环境下)

一、简介 Kafka 是一个实现了分布式的、具有分区、以及复制的日志的一个服务。它通过一套独特的设计提供了消息系统中间件的功能。它是一种发布订阅功能的消息系统。 1、名词介绍 Message 消息,就是要发送的内容,一般包装成一个消息对象。   Topic 通俗来讲的话,就是放置“消息”的地方,也就是说消息投递的一个容器。假如把消息看作是信封的话,那么 T...

PHP消息队列实现及应用

参考:https://www.cnblogs.com/JAYIT/p/10579888.html 目前对消息队列并不了解其原理,本篇文章主要是通过慕课网学习归纳的一些笔记,为后续学习打下基础。 众所周知在对网站设计的时候,会遇到给用户“群发短信”,“订单系统有大量的日志”,“秒杀设计”等,服务器没法处理这种瞬间迸发的压力,这种情况要保证系统正常有效的使用,...

WPF 中实现 Winfrom 中 Application.DoEvents() 方法

熟悉 Winfrom 中 Application.DoEvents() 方法的朋友一定用过此方法,此方法可以立即处理当前在消息队列中的所有 Windows 消息。 如在一个按钮单击事件中,需要每一秒改变label的Text属性,如下代码:      privatevoid button1_Click(object sender, EventArgs...

celery redis rabbitMQ各是什么及之间的区别?

Celery:  Celery是基于Python开发的分布式任务队列。它支持使用任务队列的方式在分布的机器/进程/线程上执行任务调度。  1、 celery工作流程: 消息中间件(message broker):Celery本身不提供消息服务,但是可以方便的和第三方提供的消息中间件集成。包括,RabbitMQ, Redis, MongoDB ,SQLAl...

problems_rabbitmq

目录 problems_rabbitmq 1 rabbitmq的guest账户无法远程登录,只能在本地登录 2 每次启动系统,总是重复执行某个@RabbitListener监听的方法 3 springboot系统启动报错 4 5 springboot启动时rabbitmq总是报错 6 rabbmitmq分布式事务总是不生效(待解决) 7 8 pr...

Windows下安装RabbitMQ

今天正好给自己机器安装rabbitmq,总结下安装经验。 现在国内访问erlang,和RabbitMQ官网好像都很难连上。我已下载好了资源,需要的朋友可以下载。 链接: https://pan.baidu.com/s/1nuPk4NR 密码: ge7z 1.Windows下安装RabbitMQ需要以下几个步骤 1)安装erlang。RabbitMQ服务端代...