Prechádzať zdrojové kódy

feat:加入AMQP的依赖,操作RabbitMQ的HelloWorld

yangyi 2 mesiacov pred
commit
b2ed2a41b7

+ 38 - 0
RabbitMQ-learn/.gitignore

@@ -0,0 +1,38 @@
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### IntelliJ IDEA ###
+.idea/modules.xml
+.idea/jarRepositories.xml
+.idea/compiler.xml
+.idea/libraries/
+*.iws
+*.iml
+*.ipr
+
+### Eclipse ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
+
+### Mac OS ###
+.DS_Store

+ 38 - 0
RabbitMQ-learn/pom.xml

@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>space.anyi</groupId>
+    <artifactId>RabbitMQ-learn</artifactId>
+    <version>1.0-SNAPSHOT</version>
+
+    <properties>
+        <maven.compiler.source>17</maven.compiler.source>
+        <maven.compiler.target>17</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+    <dependencies>
+        <!-- https://mvnrepository.com/artifact/com.rabbitmq/amqp-client -->
+        <dependency>
+            <groupId>com.rabbitmq</groupId>
+            <artifactId>amqp-client</artifactId>
+            <version>5.26.0</version>
+        </dependency>
+        <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-simple</artifactId>
+            <version>2.0.17</version>
+<!--            <scope>test</scope>-->
+        </dependency>
+        <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+            <version>2.0.17</version>
+        </dependency>
+    </dependencies>
+
+</project>

+ 38 - 0
RabbitMQ-learn/src/main/java/space/anyi/rabbitMQ_learn/helloworld/Recv.java

@@ -0,0 +1,38 @@
+package space.anyi.rabbitMQ_learn.helloworld;
+
+import com.rabbitmq.client.Channel;
+import com.rabbitmq.client.Connection;
+import com.rabbitmq.client.ConnectionFactory;
+import com.rabbitmq.client.DeliverCallback;
+
+//消费者
+public class Recv {
+
+    private final static String QUEUE_NAME = "hello";
+
+    public static void main(String[] argv) throws Exception {
+        //1.创建连接工厂
+        ConnectionFactory factory = new ConnectionFactory();
+        //2.配置
+        factory.setHost("localhost");
+        //3.获取连接和对应的channel
+        Connection connection = factory.newConnection();
+        Channel channel = connection.createChannel();
+        //4.配置队列
+        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
+        System.out.println(" [*] Waiting for messages. To exit press CTRL+C");
+
+        DeliverCallback deliverCallback = (consumerTag, delivery) -> {
+            String message = new String(delivery.getBody(), "UTF-8");
+            System.out.println(" [x] Received '" + message + "'");
+        };
+        /**
+         * 第一个参数是队列的名称
+         * 第二个参数表示获取消息后是否自动响应消息被消费成功
+         * 第三个参数是消息的处理回调方法
+         * 第四个参数是消息被取消的回调方法
+         */
+        //5.消费消息,会持续阻塞,等待消息队列有可以消费的消息
+        channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> { });
+    }
+}

+ 44 - 0
RabbitMQ-learn/src/main/java/space/anyi/rabbitMQ_learn/helloworld/Send.java

@@ -0,0 +1,44 @@
+package space.anyi.rabbitMQ_learn.helloworld;
+
+import com.rabbitmq.client.Channel;
+import com.rabbitmq.client.Connection;
+import com.rabbitmq.client.ConnectionFactory;
+//生产者
+public class Send {
+    //队列的名称
+    private final static String QUEUE_NAME = "hello";
+    public static void main(String[] argv) throws Exception {
+        //1.创建连接工厂
+        ConnectionFactory factory = new ConnectionFactory();
+        //2.配置
+        //设置RabbitMQ服务端的主机地址
+        factory.setHost("localhost");
+        //实际生产中要配置用户名和密码等等
+//        factory.setUsername("");
+//        factory.setPassword("");
+        //3.创建连接,并拿到channel
+        //我们通过channel来操作RabbitMQ
+        try (Connection connection = factory.newConnection();
+             Channel channel = connection.createChannel()) {
+            //4.给channel配置队列的消息
+            /**
+             * 第一个参数(queue)是队列的名称
+             * 第二参数是(durable)这是是否持久化队列
+             * 第三个参数(exclusive)表示是否为独占队列,独占队列只允许创建该队列的连接进行操作,其他连接无法操作该队列(服务重启后可能谁也无法操作这个队列)
+             * 第四个参数(autoDelete)表示是否为自动删除队列,该队列没有连接使用时,自动删除队列
+             * 第五个参数(arguments)表示其它额外的参数
+             */
+            channel.queueDeclare(QUEUE_NAME, false, false, false, null);
+            String message = "Hello World!";
+            //5.生产消息
+            /**
+             * 第一个参数(exchange)指定一个交换机
+             * 第二个参数(routingKey)表示队列的名称
+             * 第三个参数(props)表示携带的额外属性
+             * 第四个参数(body)是要生产的消息本身
+             */
+            channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
+            System.out.println(" [x] Sent '" + message + "'");
+        }
+    }
+}

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 0 - 0
RabbitMQ-learn/src/main/resources/HelloWord.svg


Niektoré súbory nie sú zobrazené, pretože je v týchto rozdielových dátach zmenené mnoho súborov