zoukankan      html  css  js  c++  java
  • ActiveMQ入门

    ActiveMQ简介

    概要

    • 开源
    • JMS-compliant
    • 消息中间件message-oriented middleware(MOM)
    • 松耦合,相对于RPC的紧耦合
    • 发送消息fire-and-forget
    • EDA(event-driven architecture)
    • SOA(serive-oriented architecture)
    • CEP(complex event processing)

    特性

    • JMS的实现
      • 同步、异步消息delivery
      • once-and-only-once消息delivery
      • 为订阅者提供的消息durability
    • Connectivity
      • 支持广泛的协议,包括HTTP/S,IP multicast,SSL,STOMP,TCP,UDP,XMPP,MQTT等等
      • transport connectorsnetwork connectors
    • Pluggable persistent
      • ActiveMQ提供了快速消息持久化KahaDB
      • ActiveMQ也支持JDBC数据库持久化
    • Pluggable security
      • security包含authenticationauthorization
      • ActiveMQ提供简单的基于properties files认证和授权,以及JAAS登录模块
    • JAVA开发(用JMS spec APIs)
    • 与应用服务器集成
      • 将ActiveMQ与诸如Apache TomcatJettyApache GeronimoJBoss等服务器整合
    • 广泛的client APIs
      • ActiveMQ的客户端实现可以是C/C++.NETPerlPHPPythonRuby等语言
    • Broker集群
    • 高级broker特性与client
      • ActiveMQ支持在broker的xml配置文件里使用Apache Camel
    • 非常简单的管理
      • 通过基于JMX的JConsole或ActiveMQ web console
      • 处理ActiveMQ advisory messages
      • 执行命令行脚本
      • 监控不同的日志

    搭建ActiveMQ

    Ant

    • 官网
    • 搭建步骤
    • 要点
      • 配置JAVA_HOMEANT_HOMEPATHANT_OPTS(可选),不能配置CLASSPATH
      • ant -diagnostics用于纠错

    ActiveMQ

    JMS规范

    JMS clients

    • MessageProducer用于发送消息
      • Session.createProducer()指定destination
      • send()可指定destination
      • close()关闭
    • MessageConsumer用于消费消息
      • Session.createConsumer()只能在此指定destination
      • receive()同步接收
      • sageListener.onMessage()异步接收

    JMS provider

    • MOM

    JMS message

    JMS message分为headerspayload两部分
    headers如下表格所列

    参数名 描述
    JMSDestination send时自动设置
    JMSDeliveryMode 默认persistent deliver,只能once and only once
    nonpersistent deliver只能at most once
    delivery mode能够针对消息独立设置
    JMSExpiration 可通过MessageProducer.setTimeToLive()或全局设置或 MessageProducer.send()独立设置
    值为0永不过期
    JMSMessageID 用于区别provider分发的消息
    可通过MessageProducer.setDisableMessageID() 建议ProviderJMSMessageID为null
    JMSPriority 消息的重要性,从0到9逐级增高
    0~4属于normal
    5~9属于expedited
    JMS Provider通常会优先分发高priority的消息
    JMSTimestamp provider收到消息的时间
    可通过MessageProducer.setDisableMessageTimestamp()建议ProviderJMSTimestamp为0
    JMSCorrelationID 关联当前消息与上一消息,通常用于关联请求与接收
    前缀标准为ID:
    JMSReplyTo 指定回复送达的destination
    JMSType 指定消息类型,非payload类型,鲜用
    JMSRedelivered 表示当前消息是重发之前未被确认的消息

    properties:属于headers,存储JAVA原生数据类型。含有如下两种:
    custom properties:自定义属性
    jms-defined properties:以JMSX为前缀的可选属性

    • JMSXAppID:标志发送消息的应用
    • JMSXConsumerTXID:被消费消息的事务标识
    • JMSXDeliveryCount:消息分发尝试次数
    • JMSXGroupID:标识消息组
    • JMSXGroupSeq:消息在组中的序列号
    • JMSXProducerTXID:被生产的消息的事务标识
    • JMSXRcvTimestamp:provider分发消息给consumer的时间
    • JMSXState:与provider相关的时间
    • JMSXUserID:标识发送消息的用户
    • provider-specific properties:JMS_<vendor-name>的provider特定属性,只应使用于non-JMS clients

    Message Selectors

    • 根据headersproperties筛选consumer预期接收的消息。
    • 基于SQL92子集的条件表达式,表达式为真表示符合预期
    • 不能关联payload
    • 示例
    String selector = "SYMBOL IN ('AAPL', 'CSCO') AND PRICE > " + getPreviousPrice() + " AND PE_RATIO < " + getCurrentAcceptedPriceToEarningsRatioThreshold();
    MessageConsumer consumer = session.createConsumer(destination, selector);
    
    • payload类型包含
      • Message:用于不含payload的消息
      • TextMessage:含String的消息
      • MapMessage:键值对消息,键是String,值是Java基本类型
      • BytesMessage:含byte数组的消息
      • StreamMessage:Java基本类型的流,支持串行化读写
      • ObjectMessage:含序列号的Java对象,包括集合

    JMS domains

    • point-to-point
      • destination是queue
      • 可同步可异步
      • once-and-only-once消息delivery
      • 单个consumer接收,多个consumer注册也仅有单个consumer接收并确认
    • publish/subscribe
      • destination是topic
      • 可同步可异步
      • topic默认不存储消息
      • 使用durable subscription可以让provider在consumer离线时保存所有未能发送的消息,在consumer上线发送所有存储的消息
      • 多个consumer接收
    • durability
      • durability仅用于pub/sub domain
      • durable subscription是infinite,nondurable subscription是finite
      • durable subscription只有在consumer显式离线或消息过期时,provider才会扔掉存储的消息
    • persistence
      • 与domain无关
      • 受message producer的setDeliveryMode方法控制
    • request/reply
      • JMSReplyTo指定reply发送的destination
      • JMSCorrelationID指定了request的JMSMessageID
      • QueueRequestorTopicRequestor提供了单请求-单回复的实现,单请求-多回复需要自行实现

    Administered objects

    • ConnectionFactory
      • 一个connection通常代表一个TCP socket
      • connection被client用于创建javax.jms.Session
    • Destination
      • Session创建,生命周期等同于Connection
      • Temporary destinations对于Connection是独一无二的
  • 相关阅读:
    T4 (Text Template Transformation Toolkit)
    GUI Design Studio
    51劳有所获 54务实青年
    [书目20110502]把时间当作朋友
    Rdlc子报表的动态添加
    [转]更新Android SDK到3.0版本时,遇到Failed to rename directory E:\android\tools to E:\android\temp\ToolPackage.old01问题
    JSON
    javascript 特征侦测技术
    IE的setAttribute bug
    将"类数组对象"转换成数组对象
  • 原文地址:https://www.cnblogs.com/lewh/p/6165643.html
Copyright © 2011-2022 走看看