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的更多相关文章

  1. RabbitMQ的Java API编程

    1.创建Maven工程,pom.xml引入依赖: <dependency> <groupId>com.rabbitmq</groupId> <artifact ...

  2. ElasticSearch6.0 Java API 使用 排序,分组 ,创建索引,添加索引数据,打分等(一)

    ElasticSearch6.0  Java API  使用     排序,分组 ,创建索引,添加索引数据,打分等 如果此文章对你有帮助,请关注一下哦 1.1 搭建maven 工程  创建web工程 ...

  3. Atitit 图像处理 调用opencv 通过java  api   attilax总结

    Atitit 图像处理 调用opencv 通过java  api   attilax总结 1.1. Opencv java api的支持 opencv2.4.2 就有了对java api的支持1 1. ...

  4. 【分布式】Zookeeper使用--Java API

    一.前言 上一篇博客我们通过命令行来操作Zookeper的客户端和服务端并进行相应的操作,这篇主要介绍如何通过API(JAVA)来操作Zookeeper. 二.开发环境配置 首先打开Zookeeper ...

  5. Elasticsearch的CRUD:REST与Java API

    CRUD(Create, Retrieve, Update, Delete)是数据库系统的四种基本操作,分别表示创建.查询.更改.删除,俗称"增删改查".Elasticsearch ...

  6. [转]HDFS中JAVA API的使用

    HDFS是一个分布式文件系统,既然是文件系统,就可以对其文件进行操作,比如说新建文件.删除文件.读取文件内容等操作.下面记录一下使用JAVA API对HDFS中的文件进行操作的过程. 对分HDFS中的 ...

  7. HDFS中JAVA API的使用

    HDFS中JAVA API的使用   HDFS是一个分布式文件系统,既然是文件系统,就可以对其文件进行操作,比如说新建文件.删除文件.读取文件内容等操作.下面记录一下使用JAVA API对HDFS中的 ...

  8. java安全沙箱(四)之安全管理器及Java API

    java是一种类型安全的语言,它有四类称为安全沙箱机制的安全机制来保证语言的安全性,这四类安全沙箱分别是: 类加载体系 .class文件检验器 内置于Java虚拟机(及语言)的安全特性 安全管理器及J ...

  9. Java api 入门教程 之 JAVA的Random类

    在实际的项目开发过程中,经常需要产生一些随机数值,例如网站登录中的校验数字等,或者需要以一定的几率实现某种效果,例如游戏程序中的物品掉落等. 在Java API中,在java.util包中专门提供了一 ...

随机推荐

  1. poi excel

    使用apache的poi包可以对excel进行操作读取和写入. 因excel分为xls的2003版和xlsx的2007版,poi在创建workbook时使用不同的类创建,因此需要注意区分xls. Wo ...

  2. python redis客户端使用lua脚本

    有一个需求,为一个key设置一个field存储时间戳,每当有新数据,判断新数据时间戳是否大于之前的时间戳,如果是,更新时间戳,由于依赖中间执行结果,所以使用lua减少客户端和服务端通信次数. #!/u ...

  3. 转:探讨JS合并两个数组的方法

    我们在项目过程中,有时候会遇到需要将两个数组合并成为一个的情况. 比如: var a = [1,2,3]; var b = [4,5,6]; 有两个数组a.b,需求是将两个数组合并成一个.方法如下: ...

  4. 使用adb查看CPU和内存

    adb shell ->cat/sys/class/net/wlan0/address 获取Mac地址 abd shell –>cat /proc/cpuinfo 获取CPU信息 adb ...

  5. Delphi中For In 语法应用实例

    一.遍历 TStrings var List: TStrings; s: string; begin List := TStringList.Create; List.CommaText := 'aa ...

  6. ArcGIS案例学习笔记_3_2_CAD数据导入建库

    ArcGIS案例学习笔记_3_2_CAD数据导入建库 计划时间:第3天下午 内容:CAD数据导入,建库和管理 目的:生成地块多边形,连接属性,管理 问题:CAD存在拓扑错误,标注位置偏移 教程:pdf ...

  7. 学习JS的心路历程-函式(一)

    前几天有间单提到该如何声明函式及在Hositing中会发生什么事,但是函式的奥妙不仅于此. 身为一个使用JS的工程师,我们一定要熟悉函式到比恋人还熟! 这几天将会把函式逐一扒开跟各位一起探讨其中的奥妙 ...

  8. asp.net中处理程序调用HttpContext.Current.Session获取值出错

    asp.net中处理程序调用System.Web.HttpContext.Current.Session获取Session时提示错误:未将对象引用设置到对象的实例. 解决办法:在处理程序文件类中实现I ...

  9. Excel批量修改文件

    [1]把下图片放在一个文件目录下面,如E:\SVM_Class\airplanes [2]点击“开始”→“运行”(或按快捷键win+R),在弹出框中输入“cmd”,进入dos操作界面.   [3]do ...

  10. 七个不可错过的React组件库与开发框架

    React是如今最火爆的前端技术,而React最棒的一个特点就是有大量功能丰富的组件库和开发框架可用.从按钮到卷轴到工具条,应有尽有,而且这些组件可以各行其是,也可以组装成复杂的UI,你也可以把UI分 ...