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. day09-列表

    1.列表的格式list与其他语言的数组相似,基础数据类型,可以存储各种数据类型,可以存储大量的数据,32位python可以存储2的29次方个元素,即536870912个元素,64位python的限制是 ...

  2. mysql Lock wait timeout exceeded; try restarting transaction解决

    前面已经了解了InnoDB关于在出现锁等待的时候,会根据参数innodb_lock_wait_timeout的配置,判断是否需要进行timeout的操作,本文档介绍在出现锁等待时候的查看及分析处理: ...

  3. UI5-学习篇-5-SAP创建OData服务-Structure

    本文介绍SAP后端系统基于数据结构创建OData服务过程. 1.创建数据字典 2.创建OData service 2.1创建Gateway service project 事务码:SEGW 点击Cre ...

  4. oracle 修改字符集 为ZHS16GBK

    一.oracle server 端 字符集查询 select userenv('language') from dual 其中NLS_CHARACTERSET 为server端字符集 NLS_LANG ...

  5. html _ 提取html片段内的纯文本

    var html = “html字符串”;var textstr =html.replace(/<[^>]*>|/g,"");//纯文本

  6. keal

    I remember the wonderful moment you appeared before me, like a fleeting vision, like a genius of pur ...

  7. 用python实现一个简单的服务器

    打开命令行工具,输入: python3 -m http.server 8000(端口可以自己定) 通过访问:http://ip:8000/,就能给别人快速分享文件了.

  8. 尚硅谷springboot学习18-日志使用

    默认配置 SpringBoot默认帮我们配置好了日志 //记录器 Logger logger = LoggerFactory.getLogger(getClass()); @Test public v ...

  9. JavaScript中的setInterval用法

    setInterval动作的作用是在播放动画的时,每隔一定时间就调用函数,方法或对象.可以使用本动作更新来自数据库的变量或更新时间显示.setInterval动作的语法格式如下:setInterval ...

  10. [图解tensorflow源码] 入门准备工作附常用的矩阵计算工具[转]

    [图解tensorflow源码] 入门准备工作 附常用的矩阵计算工具[转] Link: https://www.cnblogs.com/yao62995/p/5773142.html  tensorf ...