• activemq的安全机制、Connection使用方法、Session的使用方法、签收模式、使用事务


    activemq的安全机制

    ➢activemq的web管理界面: http://127 .0.0.1:8161/admin

    ➢activemq管控台使用jetty部署,所以需要修改密码则需要到相应的配置文件

    ➢C:\devsoftware\apache-activemq-5.11.1lconfjetty-realm.properties

    ➢activemq应该设置有安全机制,只有符合认证的用户才能进行发送和获取消息,所以我们也可以在activemq.xml里去添加安全验证配置!

    ➢C:\devsoftwarelapache-activemq-5.11.1lconfactivemq.xml, 在第123行之后添加配置! ( 添加一个插件配置即可)

     

    按照上面修改后

    建立ConnectionFactory工厂 对象时添加安全认证

    ConnectionFactory connectionFactory = new ActiveMQconnectionFactory(

    bhz,

    bhz,

    tcp://localhost:61616");

    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);

    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)的acknowledge方法签收消息。在这种情况下,签收发生在Session层面:签收一个已消费的消息会自动地签收这个Session所有已消费消息的收条。

    Session.DURS OK ACKNOWLEDGE此选项指示Session不必确保对传送消息的签收。它可能引起消息的重复,但是降低了Session的开销,所以只有客户端能容忍重复的消息,才可使用

    使用事务

    修改内容如下

    第三步:通过Connection对象创建Session会话(上下文环境对象),用于接收消息,参数配置1为是否启用是事务(true为启用,false不启用),参数配置2为签收模式,-般我们设置自动签收。

    Session session = connection. createSession (Boolean.TRUE, Session . AUTO ACKNOWLEDGE);

    第七步:最后我们使用JMS规范的TextMessage形式创建数据(通过Session对象),并用MessageProducer的send方法发送数据。同理客户端使用receive方法进行接收数据。最后不要忘记关闭Connection连接。

    for(inti = 1; 1<= 5; 1++){

    TextMessage textMessage = session.createTextMessage () ;

    textMessage.setText ("我是消息内容,id为:”+ i);

    messageProducer.send(textMessage);

    }

    //事务提交

    session.commit();

    if (connection != null) {

    connection.close();

    }

    签收方式

    一般实际业务中使用手工签收的方式

    手动签收:

    修改内容如下

    第三步:通过Connection对象创建Session会话(上下文环境对象),用于接收消息,参数配置1为是否启用是事务(true为启用,false不启用),参数配置2为签收模式

    生产者:

    使用CLIENT端签收的方式

    Session session = connection. createSession (Boolean.TRUE, Session . CLIENT_ACKNOWLEDGE);

    消费者

    第三步:通过Connection对象创建Session会话(上下文环境对象),用于接收消息,参数配置1为是否启用是事务(true为启用,false不启用),参数配置2为签收模式

    Session session = connection. createSession (Boolean.FALSE, Session . CLIENT_ACKNOWLEDGE);

    while (true) (

    TextMessage msg = (TextMessage) me s sageConsumer . receive () ;

    //手工去签收消息。另起一个线程(TCP)去通知我们的MQ服务确认签收

    msg. acknowledge () ;

    if (msg = nul1) break;

    System.out.println ("收到的内容:”+ msg. getText());

    }

    MessageProducer

    MessageProducer: MessageProducer是一一个由Session创建的对象,用来向

    Destination发送消息。

    void send(Destination destination, Message message);

    void send(Destination destination, Message message, int deliveryMode, intpriority, long time ToLive);

    void send(Message message);

    void send(Message message, int deliveryMode, int priority, long time ToLive);

    其中deliveryMode为传送模式,priority为消 息优先级,time ToLive为消息过期时间。

    ActiveMQ支持两种消息传送模式: PERSISTENT和NON_ PERSISTENT两种。 如果

    不指定传送模式,那么默认是持久性消息。如果容忍消息丢失,那么使用非持久性消

    息可以改善性能和减少存储的开销。

    消息优先级从0-9十个级别,0-4是普通消息,5-9是加急消息。如果不指定优先级,则

    默认为4。JMS不要求严格按照这十个优先级发送消息,但必须保证加急消息要先于普

    通消息到达。

    默认情况下,消息永不会过期。如果消息在特定周期内失去意义,那么可以设置过期

    时间,时间单位为毫秒。

    第四步:通过Session创建Destination对象, 指的是-一个客户端用来指定生产消息目标和消费消息来源的对象,在PTP模式中,Destination被 称作Queue即队列;在Pub/Sub模式,Destination被称作Topic即主题。在程序中可以使用多个Queue和Topic.(queue1 为消息队列名称,生产者和消费者必须一致)

    Destination desiDestination = session.createQueue ( "queue1 ");

    第五步:我们需要通过Session对象创建消息的发送和接收对象(生产者和消费者)Message Producer/MessageConsumer.

    MessageProducer messageProducer = session.createProducer(null) ;

    去掉第六步

    for(int 1 = 1; 1 <= 5; 1++){

    TextMessage textMessage = session. createTextMessage ();

    textMessage. setText("我是清息内容,id为:”+ i);|

    //第一个参致:目的地 (队列)

    //第二个参数:消息

    //第三个参数:是否持久化

    //第四个参数:优先级(0 - 9  0-4表示普通  5-9表示加急  默认为4 )  优先级无法绝对保证

    //第五个参救:清息在mq上的存放有效期

    messageProducer. send (desiDestination, textMessage, DeliveryMode.NON PERSISTENT, i, 1000 *60*2);

    system. out.println("生产者:”+ textMessage . getText ));

    }

  • 相关阅读:
    数据结构——树
    Android Media Framework - 开篇
    OpenApi(Swagger)快速转换成 TypeScript 代码 - STC
    20-指针-2
    学历提升中的我,入职产品经理之路
    安装scrcpy-client模块av模块异常,环境问题解决方案
    网络安全(黑客)自学
    Calibre与netlist后仿网表的仿真。
    Nacos简介。什么是Nacos?Nacos注册中心配置。Nacos入门教程
    PyScript运行Python第三方库
  • 原文地址:https://blog.csdn.net/qq_41273137/article/details/127876961