zoukankan      html  css  js  c++  java
  • ActiveMQ之java Api

    ActiveMQ 安全机制

    activemq的web管理界面:http://127.0.0.1:8161/admin

             activemq管控台使用jetty部署,所以需要修改密码则需要修改相应的配置文件,apache-activemq-5.11.1confjetty.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时,将调用该方法。

  • 相关阅读:
    LF.51.Insert In Binary Search Tree
    Use Array To Implement Queue With Size(bounded)
    Use LinkedList to implement Queue
    Use LinkedList to Implement Stack
    LT.11.Search Range In Binary Search Tree
    Odoo 12开发之后台视图 – 设计用户界面 ###
    Odoo 之业务逻辑
    Odoo开发之记录集 – 使用模型数据
    odoo 之 结构化应用数据
    odoo之数据导入导出以及模块数据
  • 原文地址:https://www.cnblogs.com/shmilyToHu/p/7545322.html
Copyright © 2011-2022 走看看