ActiveMQ之java Api
ActiveMQ 安全机制
activemq的web管理界面:http://127.0.0.1:8161/admin
activemq管控台使用jetty部署,所以需要修改密码则需要修改相应的配置文件,apache-activemq-5.11.1\conf\jetty.xml
activemq应该设置有安全机制,只有符合认证的用户才能进行发送和获取消息,所以我们可以在activemq.xml添加安全验证配置。一个插件,配置一下即可

配置完成后,需要重新启动mq。
然后在Receive和Sender中配置相关的认证信息。

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 ,String url);
Session方法使用
一旦从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)的acknowledgeMode方法签收消息。这种情况下,签收发生在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 deliveryMode,int priority . long timeToLive)
其中deliveryMode为传送模式,priority为消息优先级,timeToLive为消息过期时间。
ActiveMQ支持两种消息传送模式:PERSISTEN和NON_PERSISTENT两种。如果不指定传送模式,那么默认是持久化消息,如果容忍消息丢失,那么使用非持久性消息可以改善性能和减少存储的开销。
消息优先级从0-9石哥级别。0-4是普通消息,5-9是加急消息。如果不指定优先级,则默认为4.JMS不要求严格按照这10个优先级发送消息,但必须保证加急消息要先于普通消息到达。(消费顺序和优先级不一致)
当然ActimeMQ还有一种独有消费模式,可以确保消息顺序
默认情况下,消息永不过期,如果消息在特定周期内失去意义,那么可以设置过期时间,时间单位为毫秒。
MessageConsumer
MessageConsumer是一个由Session创建的对象,用来从Destination接收消息。
MessageConsumer createConsumer(Destination destination)
MessageConsumer createConsumer(Destination destination,String messageSelector)
MessageConsumer createConsumer(Destination destination,String messageSelector,boolean noLocal)
TopicSubscriber createDurableSubscriber(Topic topic,String name);
TopicSubscriber createDurableSubscriber(Topic topic,String name,String messageSelector,boolean noLocal);
其中messageSelector为消息选择器,noLocal标志默认为false,当设置为true时限制消费者只能接收和自己相同的连接(Conneciton)所发布的消息。此标志只适用于主推,不适用于队列;name标识订阅主题所对应的订阅名称,持久订阅时需要设置此参数。
public final String SELECTOR ="JMS_TYPE = 'MY_TAG1'";该选择器检查了传入消息的JMS_TYPE属性,并确定了这个属性,并确定了这个属性的值是否等于MY_TAG1.如果相等,则消息被消费,如果不相等,那么消息会被忽略。
消息的同步和异步接收:
消息的同步接收是指客户端主动去接收消息,客户端可以采用MessageConsumer的receive方案区接收下一个消息。
Message receive()
Message receive(long timeout)
Message receiveNoWait()
消息的异步接收是指当消息到达时,ActiveMQ主动通知客户端,可以通过注册一个实现MessageListener接口的对象到MessageConsumer,MessageListener只有一个必须实现的方案---onMessage,它只接收一个参数,即Message,在为每个发送到Destination的消息实现onMessage时,将调用该方法。
ActiveMQ之java Api的更多相关文章
- RabbitMQ的Java API编程
1.创建Maven工程,pom.xml引入依赖: <dependency> <groupId>com.rabbitmq</groupId> <artifact ...
- ElasticSearch6.0 Java API 使用 排序,分组 ,创建索引,添加索引数据,打分等(一)
ElasticSearch6.0 Java API 使用 排序,分组 ,创建索引,添加索引数据,打分等 如果此文章对你有帮助,请关注一下哦 1.1 搭建maven 工程 创建web工程 ...
- Atitit 图像处理 调用opencv 通过java api attilax总结
Atitit 图像处理 调用opencv 通过java api attilax总结 1.1. Opencv java api的支持 opencv2.4.2 就有了对java api的支持1 1. ...
- 【分布式】Zookeeper使用--Java API
一.前言 上一篇博客我们通过命令行来操作Zookeper的客户端和服务端并进行相应的操作,这篇主要介绍如何通过API(JAVA)来操作Zookeeper. 二.开发环境配置 首先打开Zookeeper ...
- Elasticsearch的CRUD:REST与Java API
CRUD(Create, Retrieve, Update, Delete)是数据库系统的四种基本操作,分别表示创建.查询.更改.删除,俗称"增删改查".Elasticsearch ...
- [转]HDFS中JAVA API的使用
HDFS是一个分布式文件系统,既然是文件系统,就可以对其文件进行操作,比如说新建文件.删除文件.读取文件内容等操作.下面记录一下使用JAVA API对HDFS中的文件进行操作的过程. 对分HDFS中的 ...
- HDFS中JAVA API的使用
HDFS中JAVA API的使用 HDFS是一个分布式文件系统,既然是文件系统,就可以对其文件进行操作,比如说新建文件.删除文件.读取文件内容等操作.下面记录一下使用JAVA API对HDFS中的 ...
- java安全沙箱(四)之安全管理器及Java API
java是一种类型安全的语言,它有四类称为安全沙箱机制的安全机制来保证语言的安全性,这四类安全沙箱分别是: 类加载体系 .class文件检验器 内置于Java虚拟机(及语言)的安全特性 安全管理器及J ...
- Java api 入门教程 之 JAVA的Random类
在实际的项目开发过程中,经常需要产生一些随机数值,例如网站登录中的校验数字等,或者需要以一定的几率实现某种效果,例如游戏程序中的物品掉落等. 在Java API中,在java.util包中专门提供了一 ...
随机推荐
- centos 主机名突然变成bogon的解决方法
主机名突然变成bogon,访问网络可能会出现问题(也可能没问题,我的就没问题),可能用到主机名的服务(比如说:mysql)可能也会出现访问不了. 所以我们需要解决以下问题,本人的解决方法: 主机名 ...
- 【版本发布】JAVA微服务开发框架,Jeecg-P3 1.0.0 重构版本发布
1.项目介绍 Jeecg-P3是一个微服务框架,采用插件式模式开发:业务插件以JAR方式提供,松耦合可插拔支持独立部署,也可无缝集成Jeecg平台中,目前jeecg已经提供了在线聊天,我的邮箱等一系列 ...
- Cause: java.sql.SQLException: The user specified as a definer ('root'@'%') does not exist
权限问题,授权 给 root 所有sql 权限 mysql> grant all privileges on *.* to root@"%" identified by &q ...
- 常用jqueryPlugin
http://www.jq22.com editable-select : jQuery可编辑可下拉插件jquery.editable-select.js
- 经典论文翻译导读之《Finding a needle in Haystack: Facebook’s photo storage》
https://github.com/chrislusf/seaweedfs [译者预读]面对海量小文件的存储和检索,Google发表了GFS,淘宝开源了TFS,而Facebook又是如何应对千亿级别 ...
- 二叉堆复习(包括d堆)
要期中考了……我真的是什么也不会啊,书都没看过TAT. 好吧整理一下二叉堆,这里就以最大堆为例好了. 首先二叉堆其实是一棵CBT,满足父节点的键值大于左右子节点的键值(wikipedia把这个叫键值, ...
- linux初始化
[Linux 系统启动过程] Linux的启动其实和windows的启动过程很类似,不过windows我们是无法看到启动信息的,而linux启动时我们会看到许多启动信息,例如某个服务是否启动. Lin ...
- python小实例一:简单爬虫
本文所谓的爬虫就是通过本地远程访问url,然后将url的读成源代码形式,然后对源代码进行解析,获取自己需要的数据,相当于简单数据挖掘.本文实现的是将一个网页的图片爬出保存到本地的过程,例子很简单,用的 ...
- [PHP]快速实现:将二维数组转为一维数组
如何将下面的二维数组转为一维数组. $msg = array( array( 'id'=>'45', 'name'=>'jack' ), array( 'id'=>'34', 'na ...
- 16.1 用auth0服务 实现用登录和管理 使用auth版本的2个大坑。
这是三周内容,实现用户登录和管理 回到master分支 切换到 han分支 更新一下 然后工作 开始工作写代码了 安装2个angular端的auth0的lib,也可不安装,后边有不安装的做法 不安装的 ...