activemq 简单代码演示 和 安全认证设置

1. 简单代码 点对点模式 queue

引入依赖

   <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-all</artifactId>
            <version>5.15.4</version>
        </dependency>

生产者

    public static void main(String[] args) throws Exception {
//        创建mq 连接工厂
        ConnectionFactory cf = new ActiveMQConnectionFactory("tcp://106.12.196.23:61616");
//        创建连接
        Connection connection = cf.createConnection();
//        开启连接
        connection.start();
//        创建一个session会话   第一个参数 是否支持事务, 第二个接受的类型
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//        创建队列
        Queue q = session.createQueue("my_queue01");
//        创建消息生产者
        MessageProducer producer = session.createProducer(q);
//        创建消息
        TextMessage textMessage = session.createTextMessage();
//        设置消息内容
        textMessage.setText("我是测试的第一个 mq queue01");
//        发送消息
        producer.send(textMessage);
//        关闭资源
        producer.close();
        session.close();
        connection.close();
    }

消费者

   public static void main(String[] args) throws Exception{
//        创建连接工厂
        ConnectionFactory factory = new ActiveMQConnectionFactory("tcp://106.12.196.23:61616");
//        创建连接
        Connection connection = factory.createConnection();
//        开启连接
        connection.start();
//        创建会话
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//        创建要连接的队列
        Queue queue01 = session.createQueue("my_queue01");
//        创建消费者
        MessageConsumer consumer = session.createConsumer(queue01);
//        接受消息
        TextMessage message = (TextMessage) consumer.receive();
        String text = message.getText();
        System.out.println(text);
        consumer.close();
        session.close();
        connection.close();

    }

订阅发布 模式

生产者

 public static void main(String[] args) throws JMSException {
//        创建连接工厂
        ConnectionFactory factory = new ActiveMQConnectionFactory("tcp://106.12.196.23:61616");
//        创建连接
        Connection connection = factory.createConnection();
//        开启连接
        connection.start();
//        创建会话
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//        创建主题
        Topic topic =session.createTopic("my_topic01");
//        创建消息生产者
        MessageProducer producer = session.createProducer(topic);
//       创建消息 并设置消息内容
        TextMessage message = session.createTextMessage("我是第一个测试的topic");
//        发送消息
        producer.send(message);
//        关闭资源
        producer.close();
        session.close();
        connection.close();
    }

订阅者

 public static void main(String[] args) throws  Exception {
//        创建连接工厂
        ConnectionFactory factory = new ActiveMQConnectionFactory("tcp://106.12.196.23:61616");
//        创建连接 并 开启连接
        Connection connection = factory.createConnection();
//        设置客户端连接id 订阅者模式需要设置clientID
        connection.setClientID("topic_client01");
        connection.start();
//        创建连接会话
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//        创建topic
        Topic my_topic01 = session.createTopic("my_topic01");
//        创建订阅者
        TopicSubscriber subscriber = session.createDurableSubscriber(my_topic01, "topic-01");
//        接受消息
        TextMessage message = (TextMessage) subscriber.receive();
        System.out.println(message.getText());
//         关闭资源
        subscriber.close();
        session.close();
        connection.close();
    }

2.在mq的配置文件中 添加简单安全认证  并重启mq服务器

 <plugins>
                <simpleAuthenticationPlugin>
                         <users>
                                <authenticationUser username="admin" password="password" groups="users,admins"/>
                                <authenticationUser username="consumer" password="consumer" groups="consumers"/>
                                <authenticationUser username="producer" password="producer" groups="producers"/>
                                <authenticationUser username="publisher" password="publisher" groups="publishers,consumers"/>
                         </users>
                </simpleAuthenticationPlugin>
        </plugins>
 

 需要修改连接,在连接中输入用户账号密码

生产者

//        创建连接 输入账号密码
        Connection connection = cf.createConnection("admin", "password");

消费者

     Connection connection = factory.createConnection("consumer", "consumer");

设置jaas 的安全认证模式

转载连接:https://blog.csdn.net/chao_1990/article/details/55270922

login.properties 配置  引用 users.properties  groups.properties的用户信息

配置用户组:vim groups.properties 

配置用户账号密码:

在配置文件中actimvemq.conf中配置

                             <!--configuration引用的是login.properties 中的配置相对应-->   
            <jaasAuthenticationPlugin configuration="activemq"/>

            <authorizationPlugin>
                <map>
                    <authorizationMap>
                            <authorizationEntries>
                             <!--配置每个具体的认证  > 表示匹配所有队列或者topic 
                             read 那些用户可以读权限,write 写(发送消息)权限,admin 最高权限用户-->   
                                    <authorizationEntry queue=">" read="consumers" write="producers" admin="admins"/>
                                    <authorizationEntry topic=">" read="consumers" write="publishers" admin="admins"/>
                                    
                            </authorizationEntries>
                    </authorizationMap>
                </map>
            </authorizationPlugin>

这样就简单配置好了 消息的 发送 接受 的权限

猜你喜欢

转载自blog.csdn.net/xiaodujava/article/details/84932292