ActiveMQ



ActiveMQ初步介绍

关于JMS

JAVA消息服务(JMS)定义了java中访问消息中间件的接口, JMS只是接口,并没有给予实现,实现JMS接口的消息中间件称JMS Provider,已有的MOM系统包括Apache的ActiveMQ、以及阿里巴巴的RocketMQ、IBM的MQseries、微软的MSMQ和BEA的MessageQ、RabbitMQ等等,他们都基本遵守JMS规范

JMS实现JMS接口的消息中间件

--Provider (MessageProvider)  生产者
--Consumer(MessageConsumer)  消费者
--PTP  Point to Point    点对点的消息类型
--Pub/Sub    Publish/Subscribe   即发布/订阅的消息模型
--Queue   队列目标
--Topic   主题目标
--ConnectionFactory   连接工厂    JMS用它创建连接
--Connection     JMS 客户端到JMS Provider 的连接
--Destination   消息的目的地
--Session    会话,  一个发送或者接收消息的线程

JMS定义了五种不同的消息正文格式,以及调用的额消息类型,允许你发送并接收一些不同形式的数据, 提供现有消息格式的一些级别的兼容性.

StreamMessage  Java 原始值的数据流
MapMessage  一套名称-值对
TextMEssage   一个字符串对象
ObjectMessage  一个序列化的JAVA对象
BytesMessage   一个未解释字节的数据流

Session接口(会话)

表示一个单线程的上下文,用于发送和接收消息,由于会话是单线程的,所以消息是连续的,就是说消息是按照发送的顺序一个一个接收的, 会话的好处是它支持事务,如果用户选择了事务支持,会话上下文将保存一组消息,直到事务被提交才发送这些消息, 在提交事务之前,用户可以使用回滚操作来取消这些消息,一个会话允许用户创建消息生生产者来发送消息,创建消息消费者来接收消息

ActiveMQ—conf目录

  • activemq.xml----------------------核心配置文件
  • jetty.xml-----------------------------核心配置文件
  • jetty-rala.proporties---------------配置用户名密码

ActiveMQ实现接收和发送

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

Connection方法使用

在成功创建正确的ConnectionFactory后,下一步将是创建一个连接, 它是JMS定义的一个接口,ConnectionFactory负责返回可以与底层消息传递系统进行通信的Connection实现,通常客户端只使用单一连接,根据JMS文档,Connection的目的是 “利用JMS提供者封装开放的连接” 以及表示, “客户端与提供者服务例程之间的开发TCP/IP套接字” 该文档还指出Connection应该是进行客户端身份验证的地方.

当一个Connection被创建时,它的传输默认是关闭的, 必须使用start方法开启, 一个Connection可以建立一个或多个Session
当一个程序执行完成后,必须关闭之前创建的Connection,否则ActiveMQ不能释放资源,关闭一个Connection同样也关闭Session,  MessageProducer和MessageConsumer
Connection createConnection();
Connection createConnection(String userName, String password)

一旦从ConnectionFactory中获得一个Connection,必须从Connection中创建一个或者多个Session, Session 是一个发送或者接收消息的线程, 可以使用Session创建MessageProducer, MessageConsumer和Message
Session 可以被事务化, 也可以不被事务化, 通常, 可以通过向Connection上的适当创建方法传递一个布尔参数对此进行设置;
Session createSession(boolean transacted, int acknowledgeMode)
其中transacted为使用事务表示, acknowledgeMode为签收模式 结束事务有两种方法: 提交或者回滚, 当一个事务提交, 消息被处理,;如果事务中有一个步骤失败, 事务就回滚, 这个事务中的已经执行的动作将被取消, 在发送消息最后也必须要使用session.commit()方法表示提交事务
签收模式有三种形式:

  • Session.AUTO_ACKNOWLEDGE 当客户端从receive或onMessage成功返回时, Session自动签收客户端的这条消息的收条
  • Session.CLIENT_ACKNOWLEDGE 客户端通过调用消息(message) 的acknowledge方法签收消息, 这种情况下, 签收发生在Session层面:签收一个已消费的消息会自动签收这个Session所有已经消费的手收条
  • Session.DUPS_OK_ACKNOWLEDGE 此选项指示Session不必确保对传送消息的签收, 它可能引起消息的重复,但是降低了Session的开销, 所以之后客户端能容忍重复的消息,才可用

MessageProducer

MessageProducer: MessageProducer是一个有Session创建的对象,用来想Destination发送消息
void send(Destination destination, Message message);
void send(Destination destination, Message message, int deliveryMode,int priority, long timeToLive);
void send(Message message);
void send(Message message, int diliveryMode, int priority, long timeToLive);
send()方法可以有5个参数

  • –第一个参数: 目的地
  • –第二个参数: 消息
  • –第三个参数: 是否持久化
  • –第四个参数: 优先级(0–9 0–4表示普通 5–9 表示加急 默认4)
  • –第五个参数: 消息在mq上存放的有效期
其中diliveryMode为传送模式,priority为消息优先级,  timeToLive为消息过期时间,ActiveMQ支持两种消息传送模式,PERSISTENT和NON_PERSISTENT两种,如果不指定传送模式,那么默认是持久性消息,如果容忍消息丢失,那么使用非持久性消息可以改变性能和减少存储的开销.
消息优先级从0--9是个级别, 0--4 是普通消息,  5--9是加急消息, 如果不指定 优先级,则默认为4,JMS不要求严格按照这十个优先级发送消息,但必须保证加急消息要优先于普通消息
默认情况下,消息不会过期,如果消息在特定周期内失去意义,那么可以设置过期时间,时间单位为毫秒
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值