消息队列 ActiveMQ详解

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

1.下载安装包:

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

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

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是否启动:

   netstat -anp|grep 61616  图示:

  关闭 ./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

如果需要修改密码,请前往配置文件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的概述:

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 如果消息发送失败怎么办?

Activemq 有两种通信方式,点到点形式和发布订阅模式。

如果是点到点模式的话,如果消息发送不成功此 消息默认会保存到 activemq 服务端知道有消费者将其消费,所以消息是不会丢失的。

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

原文地址:https://www.cnblogs.com/xinghaonan/p/11977771.html

时间: 2024-11-03 18:55:56

消息队列 ActiveMQ详解的相关文章

android消息机制原理详解

android消息机制原理详解 因为之前使用的是CSDN默认的文本编辑器,而且也因为懒得学用MarkDown来写博客,所以排版上有一些问题.就上一篇写的设计模式之抽象工厂模式提出了这个问题(一个android群的群友提出来的,没有在评论里评论),所以以后的文章都用MarkDown来写了. 好了,言归正传,这篇文章我来介绍一下android消息机制的原理 Android消息机制概述 说到Android的消息机制,Android初级工程师(不包括那些初学者)肯定会想到Handler.是的,Andro

spring websocket 和socketjs实现单聊群聊,广播的消息推送详解

spring websocket 和socketjs实现单聊群聊,广播的消息推送详解 WebSocket简单介绍 随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了.近年来,随着HTML5的诞生,WebSocket协议被提出,它实现了浏览器与服务器的全双工通信,扩展了浏览器与服务端的通信功能,使服务端也能主动向客户端发送数据. 我们知道,传统的HTTP协议是无状态的,每次请求(request)都要由客户端(如 浏览器)主动发起,服务端进行处理后返回response结果,而

lesson5:利用jmeter来压测消息队列(activemq)

本文讲述了利用jmeter来压测消息队列,其中消息队列采用apache的activemq,jmeter本身是支持符合jms标准消息队列的压测,由于jmeter的官方sampler配置比较复杂,本文直接使用sdk的方式来压测,与生产实际使用更加接近,各位如对官方的sampler感兴趣,可以自行去配置完成. 准备工作:下载activemq 地址:http://activemq.apache.org 本文中的activemq采用的是5.9.0版本. jMetterLessons工程源码地址:https

第十一章 企业项目开发--消息队列activemq

注意:本章代码基于 第十章 企业项目开发--分布式缓存Redis(2) 代码的github地址:https://github.com/zhaojigang/ssmm0 消息队列是分布式系统中实现RPC的一种手段. 1.消息队列的基本使用流程 假设: 我们有这样一个需求,当每注册一个admin的之后,就写一条日志log数据到数据库. 分析: 在实际中,我们是不会把日志直接写入数据库的,因为日志数据通常是庞大的,而且日志的产生是频繁的,如果我们使用数据库存储日志,哪怕是使用异步存储,也是极耗性能的.

深入浅出 消息队列 ActiveMQ(转)

一. 概述与介绍 ActiveMQ 是Apache出品,最流行的.功能强大的即时通讯和集成模式的开源服务器.ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现.提供客户端支持跨语言和协议,带有易于在充分支持JMS 1.1和1.4使用J2EE企业集成模式和许多先进的功能. 二. 特性 1. 多种语言和协议编写客户端.语言: Java.C.C++.C#.Ruby.Perl.Python.PHP.应用协议:OpenWire.Stomp REST.WS N

Android的消息机制Handler详解

Android的消息机制详解 Android的消息机制主要指 Handler 的运行机制,Handler的运行需要底层的MessageQueue 和 Looper 的支撑. MessageQueue:消息队列,它的内部存储了一组消息,以队列的形式对外提供插入和删除的工作,其内部存储结构采用单链表的数据结构来存储消息列表. Looper:可理解为消息循环. 由于MessageQueue只是一个消息存储单元,不能去处理消息,而Looper会以无限循环的形式去查找是否有新的消息,如果有的话就处理,否则

消息队列ActiveMQ

一:为什么要使用消息队列呢? 在开发上一个APP后台时候,其中很重要的一块就是消息,通讯模块,使用的是开源的Openfire. 架构: 两台API服务器 两台Openfire服务器 若干数据库服务器集群 其中业务的很大一部分都需要发送消息,用户下了订单,用户取消订单,等等都需要服务器给用户来发送消息.使用的解决方式就是在Openfire的基础上规定了自己的消息格式.用户去操作,然后API服务器通知Openfire服务器去发送消息.Openfire服务器去接受来自API服务器的请求,然后去给用户发

Java消息队列--ActiveMq 实战

原文地址:http://www.cnblogs.com/jaycekon/p/6225058.html 1.下载安装ActiveMQ ActiveMQ官网下载地址:http://activemq.apache.org/download.html ActiveMQ 提供了Windows 和Linux.Unix 等几个版本,楼主这里选择了Linux 版本下进行开发. 下载完安装包,解压之后的目录: 从它的目录来说,还是很简单的: bin存放的是脚本文件 conf存放的是基本配置文件 data存放的是

深入浅出 消息队列 ActiveMQ

一. 概述与介绍 ActiveMQ 是Apache出品,最流行的.功能强大的即时通讯和集成模式的开源服务器.ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现.提供客户端支持跨语言和协议,带有易于在充分支持JMS 1.1和1.4使用J2EE企业集成模式和许多先进的功能. 二. 特性 1. 多种语言和协议编写客户端.语言: Java.C.C++.C#.Ruby.Perl.Python.PHP.应用协议:OpenWire.Stomp REST.WS N