- <!-- https://mvnrepository.com/artifact/com.rabbitmq/amqp-client -->
- <dependency>
- <groupId>com.rabbitmq</groupId>
- <artifactId>amqp-client</artifactId>
- <version>4.10.0</version>
- </dependency>
- <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 -->
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-log4j12</artifactId>
- <version>1.7.25</version>
- <scope>test</scope>
- </dependency>
- <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
- <dependency>
- <groupId>org.apache.commons</groupId>
- <artifactId>commons-lang3</artifactId>
- <version>3.9</version>
- </dependency>
如图简单的--simple简单模式是一个生产一个消费这样形成一个简单的消息队列的入门
- 消息产生着&&将消息放入队列
- 消息的消费者(consumer) 监听(while) 消息队列,如果队列中有消息,就消费掉,消息被拿走后,自动从队列中删除(隐患 消息可能没有被消费者正确处理,已经从队列中消失了,造成消息的丢失)应用场景:聊天(中间有一个过度的服务器;p端,c端)


这里个人感觉和原生的jdbc很像,先创建连接信息再去进行操作
- package com.lanlan.Simple;
-
- import com.rabbitmq.client.Channel;
- import com.rabbitmq.client.Connection;
- import com.rabbitmq.client.ConnectionFactory;
-
- import java.io.IOException;
- import java.util.concurrent.TimeoutException;
-
- public class sheng {
- //所有中间键技术都是基于tcp/ip协议之上来构建,只不过rabbitma是遵循ampq协议
- public static void main(String[] args) throws IOException, TimeoutException {
- //1:创建连接工程
- ConnectionFactory connectionFactory = new ConnectionFactory();
- connectionFactory.setHost("101.35.114.23"); //填写你的ip
- connectionFactory.setPort(5672); //mq 默认端口
- connectionFactory.setUsername("guest"); //mq 管理员账号
- connectionFactory.setPassword("guest"); //mq 管理员密码
- connectionFactory.setVirtualHost("/");
- //为下面提供对象
- Connection connection = null;
- Channel channel = null;
- try{
- //2:创建连接connnction
- connection = connectionFactory.newConnection("客户端看见的消息");
- //3:通过连接获取通道
- channel = connection.createChannel();
- //4:通过创建交换机,声明队列。绑定关系。路由key,发送消息,和接收消息
- String queueName = "queue1";
- /*
- 参数1:队列名称
- 参数2:是否持久化,
- 参数3:排他性,是否独占独立
- 参数4:是否自动删除,一般不自动删除
- 参数5:携带参数,后面有用到
- * */
- channel.queueDeclare(queueName,false,false,false,null);
- //5:准备消息内容
- String message ="蓝蓝的代码人!!!!";
- //6:发送出去给队列
- channel.basicPublish("",queueName,null,message.getBytes());
- System.err.println("发送消息成功");
- } catch (IOException | TimeoutException e) {
- e.printStackTrace();
- } finally {
- //7:关闭通道
- if (channel!=null&& channel.isOpen()){
- channel.close();
- }
- //8:关闭连接
- if (connection !=null && connection.isOpen()){
- connection.close();
- }
- }
- }
- }


这里感兴趣的可以打一个断点去看一下。
现在我们的生产者已经将信息发到了消息队列,我们应该编写一个消费找一条信息。

- package lanlan.Simple;
-
- import com.rabbitmq.client.*;
- import java.io.IOException;
- public class xiao {
-
- //所有中间键技术都是基于tcp/ip协议之上来构建,只不过rabbitma是遵循ampq协议
- public static void main(String[] args) throws Exception {
- //1:创建连接工程
- ConnectionFactory connectionFactory = new ConnectionFactory();
- connectionFactory.setHost("101.35.114.64");
- connectionFactory.setPort(5672);
- connectionFactory.setUsername("guest");
- connectionFactory.setPassword("guest");
- connectionFactory.setVirtualHost("/");
- //为下面提供对象
- Connection connection = null;
- Channel channel = null;
- try{
- //2:创建连接connnction
- connection = connectionFactory.newConnection("客户端看见的消息");
- //3:通过连接获取通道xs
- channel = connection.createChannel();
-
-
- channel.queueDeclare("queue1", false, false, false, null);
- DeliverCallback deliverCallback = (consumerTag, delivery) -> {
- String message = new String(delivery.getBody(), "UTF-8");
- System.out.println("消费的消息是" + message + "'");
- };
- channel.basicConsume("queue1", true, deliverCallback, consumerTag -> { });
-
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- //7:关闭通道
- if (channel!=null&& channel.isOpen()){
- channel.close();
- }
- //8:关闭连接
- if (connection !=null && connection.isOpen()){
- connection.close();
- }
- }
- }
-
- }
写好代码然后去消费他

这样简单的入门就完成了
