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>
这样就简单配置好了 消息的 发送 接受 的权限