1. Cola en modo punto a punto de código simple
Introducir dependencias
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-all</artifactId>
<version>5.15.4</version>
</dependency>
Productor
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();
}
consumidor
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();
}
Modelo de publicación por suscripción
Productor
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();
}
abonado
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. Agregue autenticación de seguridad simple al archivo de configuración mq y reinicie el servidor mq
<plugins>
<simpleAuthenticationPlugin>
<users>
<authenticationUser username = "admin" contraseña = "contraseña" grupos = "usuarios, administradores" />
<authenticationUser username = "consumidor" contraseña = "consumidor" grupos = "consumidores" />
< authenticationUser username = "productor" contraseña = "productor" grupos = "productores" />
<authenticationUser username = "editor" contraseña = "publicador" grupos = "editores, consumidores" />
</users>
</simpleAuthenticationPlugin>
</plugins>
Necesita modificar la conexión, ingrese la contraseña de la cuenta de usuario en la conexión
Productor
// 创建连接 输入账号密码
Connection connection = cf.createConnection("admin", "password");
consumidor
Connection connection = factory.createConnection("consumer", "consumer");
Establecer el modo de autenticación de seguridad de jaas
Enlace de reimpresión: https://blog.csdn.net/chao_1990/article/details/55270922
La configuración de login.properties hace referencia a la información del usuario en users.properties groups.properties
Configurar grupos de usuarios: vim groups.properties
Configurar la contraseña de la cuenta de usuario:
Configure en el archivo de configuración actimvemq.conf
<! - configuración se refiere a la configuración correspondiente a
login.properties -> <jaasAuthenticationPlugin configuration = "activemq" /><authorizationPlugin>
<map>
<authorizationMap>
<authorizationEntries>
<! - Configurar cada autenticación específica> significa hacer coincidir todas las colas o temas.
Leer que los usuarios pueden leer, escribir (enviar mensajes), administrador, el usuario de mayor autoridad-->
< autorizaciónEntry queue = ">" leer = "consumidores" escribir = "productores" admin = "administradores" />
<autorizaciónEntry tema = ">" leer = "consumidores" escribir = "editores" admin = "administradores" />
</ autorizaciónEntries >
</ AuthorizationMap>
</map>
</authorizationPlugin>
Esto simplemente configura el permiso para enviar y recibir mensajes.