guyanqing vor 1 Jahr
Ursprung
Commit
b97b5876e1
28 geänderte Dateien mit 615 neuen und 55 gelöschten Zeilen
  1. 56 55
      vip23-rabbitmq2/.idea/workspace.xml
  2. 1 0
      vip23-rabbitmq2/ab.log
  3. 1 0
      vip23-rabbitmq2/abc.log
  4. 1 0
      vip23-rabbitmq2/abcd.log
  5. 21 0
      vip23-rabbitmq2/src/main/java/com/sf/Random.java
  6. 38 0
      vip23-rabbitmq2/src/main/java/com/sf/chijiuhua/ConsumerMessage.java
  7. 40 0
      vip23-rabbitmq2/src/main/java/com/sf/chijiuhua/ProducerMessage.java
  8. 47 0
      vip23-rabbitmq2/src/main/java/com/sf/publishandsubscribe/PublishMessageLog.java
  9. 45 0
      vip23-rabbitmq2/src/main/java/com/sf/publishandsubscribe/SubscribeMessageLog1.java
  10. 51 0
      vip23-rabbitmq2/src/main/java/com/sf/publishandsubscribe/SubscribeMessageLog2.java
  11. 52 0
      vip23-rabbitmq2/src/main/java/com/sf/route/PublishMessageLog.java
  12. 51 0
      vip23-rabbitmq2/src/main/java/com/sf/route/SubscribeMessageLog1.java
  13. 52 0
      vip23-rabbitmq2/src/main/java/com/sf/route/SubscribeMessageLog2.java
  14. 58 0
      vip23-rabbitmq2/src/main/java/com/sf/topic/PublishMessageLog.java
  15. 51 0
      vip23-rabbitmq2/src/main/java/com/sf/topic/SubscribeMessageLog1.java
  16. 50 0
      vip23-rabbitmq2/src/main/java/com/sf/topic/SubscribeMessageLog2.java
  17. BIN
      vip23-rabbitmq2/target/classes/com/sf/Random.class
  18. BIN
      vip23-rabbitmq2/target/classes/com/sf/chijiuhua/ConsumerMessage.class
  19. BIN
      vip23-rabbitmq2/target/classes/com/sf/chijiuhua/ProducerMessage.class
  20. BIN
      vip23-rabbitmq2/target/classes/com/sf/publishandsubscribe/PublishMessageLog.class
  21. BIN
      vip23-rabbitmq2/target/classes/com/sf/publishandsubscribe/SubscribeMessageLog1.class
  22. BIN
      vip23-rabbitmq2/target/classes/com/sf/publishandsubscribe/SubscribeMessageLog2.class
  23. BIN
      vip23-rabbitmq2/target/classes/com/sf/route/PublishMessageLog.class
  24. BIN
      vip23-rabbitmq2/target/classes/com/sf/route/SubscribeMessageLog1.class
  25. BIN
      vip23-rabbitmq2/target/classes/com/sf/route/SubscribeMessageLog2.class
  26. BIN
      vip23-rabbitmq2/target/classes/com/sf/topic/PublishMessageLog.class
  27. BIN
      vip23-rabbitmq2/target/classes/com/sf/topic/SubscribeMessageLog1.class
  28. BIN
      vip23-rabbitmq2/target/classes/com/sf/topic/SubscribeMessageLog2.class

+ 56 - 55
vip23-rabbitmq2/.idea/workspace.xml

@@ -5,23 +5,19 @@
   </component>
   <component name="ChangeListManager">
     <list default="true" id="336408f8-f508-43fa-862f-2a486d9e0671" name="Changes" comment="">
-      <change afterPath="$PROJECT_DIR$/../vip23-rabbitmq/vip23-rabbitmq.iml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/.idea/compiler.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/.idea/encodings.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/.idea/jarRepositories.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/.idea/misc.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/.idea/vcs.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/pom.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/src/main/java/com/sf/fair/ConsumerWorkMessage1.java" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/src/main/java/com/sf/fair/ConsumerWorkMessage2.java" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/src/main/java/com/sf/fair/ProducerWorkMessage.java" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/src/main/java/com/sf/hello/ConsumerMessage.java" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/src/main/java/com/sf/hello/ProducerMessage.java" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/src/main/java/com/sf/work/ConsumerWorkMessage1.java" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/src/main/java/com/sf/work/ConsumerWorkMessage2.java" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/src/main/java/com/sf/work/ProducerWorkMessage.java" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/src/test/java/com/sf/AppTest.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/main/java/com/sf/Random.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/main/java/com/sf/chijiuhua/ConsumerMessage.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/main/java/com/sf/chijiuhua/ProducerMessage.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/main/java/com/sf/publishandsubscribe/PublishMessageLog.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/main/java/com/sf/publishandsubscribe/SubscribeMessageLog1.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/main/java/com/sf/publishandsubscribe/SubscribeMessageLog2.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/main/java/com/sf/route/PublishMessageLog.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/main/java/com/sf/route/SubscribeMessageLog1.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/main/java/com/sf/route/SubscribeMessageLog2.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/main/java/com/sf/topic/PublishMessageLog.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/main/java/com/sf/topic/SubscribeMessageLog1.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/main/java/com/sf/topic/SubscribeMessageLog2.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
     </list>
     <option name="SHOW_DIALOG" value="false" />
     <option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -38,6 +34,9 @@
   <component name="Git.Settings">
     <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$/.." />
   </component>
+  <component name="HighlightingSettingsPerFile">
+    <setting file="jar://$MAVEN_REPOSITORY$/com/rabbitmq/amqp-client/5.8.0/amqp-client-5.8.0-sources.jar!/com/rabbitmq/client/Channel.java" root0="SKIP_INSPECTION" />
+  </component>
   <component name="MarkdownSettingsMigration">
     <option name="stateVersion" value="1" />
   </component>
@@ -48,30 +47,30 @@
   <component name="ProjectViewState">
     <option name="showLibraryContents" value="true" />
   </component>
-  <component name="PropertiesComponent"><![CDATA[{
-  "keyToString": {
-    "RunOnceActivity.OpenProjectViewOnStart": "true",
-    "RunOnceActivity.ShowReadmeOnStart": "true",
-    "SHARE_PROJECT_CONFIGURATION_FILES": "true",
-    "WebServerToolWindowFactoryState": "false",
-    "node.js.detected.package.eslint": "true",
-    "node.js.detected.package.tslint": "true",
-    "node.js.selected.package.eslint": "(autodetect)",
-    "node.js.selected.package.tslint": "(autodetect)",
-    "project.structure.last.edited": "Modules",
-    "project.structure.proportion": "0.0",
-    "project.structure.side.proportion": "0.0",
-    "settings.editor.selected.configurable": "preferences.lookFeel",
-    "vue.rearranger.settings.migration": "true"
+  <component name="PropertiesComponent">{
+  &quot;keyToString&quot;: {
+    &quot;RunOnceActivity.OpenProjectViewOnStart&quot;: &quot;true&quot;,
+    &quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;,
+    &quot;SHARE_PROJECT_CONFIGURATION_FILES&quot;: &quot;true&quot;,
+    &quot;WebServerToolWindowFactoryState&quot;: &quot;false&quot;,
+    &quot;node.js.detected.package.eslint&quot;: &quot;true&quot;,
+    &quot;node.js.detected.package.tslint&quot;: &quot;true&quot;,
+    &quot;node.js.selected.package.eslint&quot;: &quot;(autodetect)&quot;,
+    &quot;node.js.selected.package.tslint&quot;: &quot;(autodetect)&quot;,
+    &quot;project.structure.last.edited&quot;: &quot;Modules&quot;,
+    &quot;project.structure.proportion&quot;: &quot;0.0&quot;,
+    &quot;project.structure.side.proportion&quot;: &quot;0.0&quot;,
+    &quot;settings.editor.selected.configurable&quot;: &quot;editor.preferences.fonts.default&quot;,
+    &quot;vue.rearranger.settings.migration&quot;: &quot;true&quot;
   }
-}]]></component>
-  <component name="RunManager" selected="Application.com.sf.fair.ConsumerWorkMessage2">
-    <configuration name="ConsumerWorkMessage2" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
-      <option name="MAIN_CLASS_NAME" value="com.sf.work.ConsumerWorkMessage2" />
+}</component>
+  <component name="RunManager" selected="Application.PublishMessageLog">
+    <configuration name="PublishMessageLog" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
+      <option name="MAIN_CLASS_NAME" value="com.sf.topic.PublishMessageLog" />
       <module name="vip23-rabbitmq2" />
       <extension name="coverage">
         <pattern>
-          <option name="PATTERN" value="com.sf.work.*" />
+          <option name="PATTERN" value="com.sf.topic.*" />
           <option name="ENABLED" value="true" />
         </pattern>
       </extension>
@@ -79,12 +78,12 @@
         <option name="Make" enabled="true" />
       </method>
     </configuration>
-    <configuration name="ProducerWorkMessage" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
-      <option name="MAIN_CLASS_NAME" value="com.sf.work.ProducerWorkMessage" />
+    <configuration name="SubscribeMessageLog2" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
+      <option name="MAIN_CLASS_NAME" value="com.sf.route.SubscribeMessageLog2" />
       <module name="vip23-rabbitmq2" />
       <extension name="coverage">
         <pattern>
-          <option name="PATTERN" value="com.sf.work.*" />
+          <option name="PATTERN" value="com.sf.route.*" />
           <option name="ENABLED" value="true" />
         </pattern>
       </extension>
@@ -92,12 +91,12 @@
         <option name="Make" enabled="true" />
       </method>
     </configuration>
-    <configuration name="com.sf.fair.ConsumerWorkMessage1" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
-      <option name="MAIN_CLASS_NAME" value="com.sf.fair.ConsumerWorkMessage1" />
+    <configuration name="com.sf.route.PublishMessageLog" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
+      <option name="MAIN_CLASS_NAME" value="com.sf.route.PublishMessageLog" />
       <module name="vip23-rabbitmq2" />
       <extension name="coverage">
         <pattern>
-          <option name="PATTERN" value="com.sf.fair.*" />
+          <option name="PATTERN" value="com.sf.route.*" />
           <option name="ENABLED" value="true" />
         </pattern>
       </extension>
@@ -105,12 +104,12 @@
         <option name="Make" enabled="true" />
       </method>
     </configuration>
-    <configuration name="com.sf.fair.ConsumerWorkMessage2" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
-      <option name="MAIN_CLASS_NAME" value="com.sf.fair.ConsumerWorkMessage2" />
+    <configuration name="com.sf.topic.SubscribeMessageLog1" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
+      <option name="MAIN_CLASS_NAME" value="com.sf.topic.SubscribeMessageLog1" />
       <module name="vip23-rabbitmq2" />
       <extension name="coverage">
         <pattern>
-          <option name="PATTERN" value="com.sf.fair.*" />
+          <option name="PATTERN" value="com.sf.topic.*" />
           <option name="ENABLED" value="true" />
         </pattern>
       </extension>
@@ -118,12 +117,12 @@
         <option name="Make" enabled="true" />
       </method>
     </configuration>
-    <configuration name="com.sf.fair.ProducerWorkMessage" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
-      <option name="MAIN_CLASS_NAME" value="com.sf.fair.ProducerWorkMessage" />
+    <configuration name="com.sf.topic.SubscribeMessageLog2" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
+      <option name="MAIN_CLASS_NAME" value="com.sf.topic.SubscribeMessageLog2" />
       <module name="vip23-rabbitmq2" />
       <extension name="coverage">
         <pattern>
-          <option name="PATTERN" value="com.sf.fair.*" />
+          <option name="PATTERN" value="com.sf.topic.*" />
           <option name="ENABLED" value="true" />
         </pattern>
       </extension>
@@ -133,11 +132,11 @@
     </configuration>
     <recent_temporary>
       <list>
-        <item itemvalue="Application.com.sf.fair.ProducerWorkMessage" />
-        <item itemvalue="Application.com.sf.fair.ConsumerWorkMessage2" />
-        <item itemvalue="Application.com.sf.fair.ConsumerWorkMessage1" />
-        <item itemvalue="Application.ProducerWorkMessage" />
-        <item itemvalue="Application.ConsumerWorkMessage2" />
+        <item itemvalue="Application.PublishMessageLog" />
+        <item itemvalue="Application.com.sf.topic.SubscribeMessageLog1" />
+        <item itemvalue="Application.com.sf.topic.SubscribeMessageLog2" />
+        <item itemvalue="Application.com.sf.route.PublishMessageLog" />
+        <item itemvalue="Application.SubscribeMessageLog2" />
       </list>
     </recent_temporary>
   </component>
@@ -149,7 +148,9 @@
       <option name="number" value="Default" />
       <option name="presentableId" value="Default" />
       <updated>1694314976610</updated>
-      <workItem from="1694314978194" duration="8819000" />
+      <workItem from="1694314978194" duration="11029000" />
+      <workItem from="1694764083472" duration="1898000" />
+      <workItem from="1694824511520" duration="13825000" />
     </task>
     <servers />
   </component>

+ 1 - 0
vip23-rabbitmq2/ab.log

@@ -0,0 +1 @@
+[auth.error] Hello RabbitMQ i=0

+ 1 - 0
vip23-rabbitmq2/abc.log

@@ -0,0 +1 @@
+Hello RabbitMQ 1Hello RabbitMQ 2Hello RabbitMQ 3

+ 1 - 0
vip23-rabbitmq2/abcd.log

@@ -0,0 +1 @@
+Hello RabbitMQ 0

+ 21 - 0
vip23-rabbitmq2/src/main/java/com/sf/Random.java

@@ -0,0 +1,21 @@
+package com.sf;
+
+/**
+ * 随机抽人抽题
+ */
+public class Random {
+
+    public static void main(String[] args) {
+        String[] student = {
+                "SYQ","ZZX","WZY","CYJ","LYJ",
+                "LYT","HKY","LYP","LXY","BJQ",
+                "NSH","HTK","LTZ","KWB","ZSJ",
+                "LMP","SBR","LYL","FB","SH",
+                "HCB","WTY","HQQ","TZT","AZT",
+                "LSY","CZY","SJH"
+        };
+        String[] ti = {"1","2","3","4","5","6","7","8"};
+        System.out.println("幸运神===>"+student[(int)(Math.random()*student.length)]);
+        System.out.println("幸运问题===>"+ti[(int)(Math.random()*ti.length)]);
+    }
+}

+ 38 - 0
vip23-rabbitmq2/src/main/java/com/sf/chijiuhua/ConsumerMessage.java

@@ -0,0 +1,38 @@
+package com.sf.chijiuhua;
+
+import com.rabbitmq.client.Channel;
+import com.rabbitmq.client.Connection;
+import com.rabbitmq.client.ConnectionFactory;
+import com.rabbitmq.client.DeliverCallback;
+
+import java.io.IOException;
+import java.util.concurrent.TimeoutException;
+
+/**
+ * 验证持久化的订阅
+ */
+public class ConsumerMessage {
+    //声明要获取消息的队列名称
+    private final static String QUEUE_NAME = "CJH-hello";
+
+    public static void main(String[] args) throws IOException, TimeoutException {
+        //创建连接RabbitMQ服务器的连接
+        ConnectionFactory factory = new ConnectionFactory();
+        //设置连接RabbitMQ的服务器地址
+        factory.setHost("192.168.180.133");
+        //设置连接RabbitMQ的服务器AMQP端口号
+        factory.setPort(5672);
+        //创建一个连接
+        Connection connection = factory.newConnection();
+        //创建频道
+        Channel channel = connection.createChannel();
+        //声明一个队列,第2个参数,设置为true声明一个持久化队列(重启服务器后,消息可能不见了,注意是持久化队列而不是持久化消息,注意理解)
+        channel.queueDeclare(QUEUE_NAME,true,false,false,null);
+
+        DeliverCallback deliverCallback = (consumerTag, delivery) -> {
+            String message = new String(delivery.getBody(), "UTF-8");
+            System.out.println(" [x] Received '" + message + "'");
+        };
+        channel.basicConsume(QUEUE_NAME,true,deliverCallback,consumerTag -> {});
+    }
+}

+ 40 - 0
vip23-rabbitmq2/src/main/java/com/sf/chijiuhua/ProducerMessage.java

@@ -0,0 +1,40 @@
+package com.sf.chijiuhua;
+
+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 ProducerMessage {
+    //声明一个队列名称
+    private static final String QUEUE_NAME="CJH-hello";
+    public static void main(String[] args) throws IOException, TimeoutException {
+        //创建连接RabbitMQ服务器的连接
+        ConnectionFactory factory = new ConnectionFactory();
+        //设置连接RabbitMQ的服务器地址
+        factory.setHost("192.168.180.133");
+        //设置连接RabbitMQ的服务器AMQP端口号
+        factory.setPort(5672);
+        //创建一个连接
+        Connection connection = factory.newConnection();
+        //创建频道
+        Channel channel = connection.createChannel();
+        /*
+            声明一个持久化队列
+            参数说明:第2个参数: durable: 设置为true,这时我们声明的队列就是一个持久化队列
+         */
+        channel.queueDeclare(QUEUE_NAME,true,false,false,null);
+        //构建一个消息
+        String message = "Hello RabbitMQ";
+        channel.basicPublish("",QUEUE_NAME,null,message.getBytes());
+        System.out.println(" [x] Sent '" + message + "'");
+        //关闭频道和连接
+        channel.close();
+        connection.close();
+    }
+}

+ 47 - 0
vip23-rabbitmq2/src/main/java/com/sf/publishandsubscribe/PublishMessageLog.java

@@ -0,0 +1,47 @@
+package com.sf.publishandsubscribe;
+
+import com.rabbitmq.client.BuiltinExchangeType;
+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 PublishMessageLog {
+
+    //声明需要创建的交换器名称
+    private final static String EXCHANGE_NAME = "logs";
+
+    public static void main(String[] args) throws IOException, TimeoutException {
+        //创建连接RabbitMQ服务器的连接
+        ConnectionFactory factory = new ConnectionFactory();
+        //设置连接RabbitMQ的服务器地址
+        factory.setHost("192.168.180.133");
+        //设置连接RabbitMQ的服务器AMQP端口号
+        factory.setPort(5672);
+        //创建一个连接
+        Connection connection = factory.newConnection();
+        //创建频道
+        Channel channel = connection.createChannel();
+        /*
+            创建一个名为logs,类型为fanout交换器
+            RabbitMQ客户端提供了交换器类型的枚举BuiltinExchangeType
+         */
+        channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.FANOUT);
+        //向交换器中发送几条消息,我这里循环发送三条消息
+        for (int i = 1; i <=3; i++) {
+            //构建发送的消息
+            String message = "Hello RabbitMQ "+i;
+            //发送
+            channel.basicPublish(EXCHANGE_NAME,"",null,message.getBytes());
+        }
+        System.out.println("========消息发布完成========");
+        //关闭频道和连接
+        channel.close();
+        connection.close();
+    }
+}

+ 45 - 0
vip23-rabbitmq2/src/main/java/com/sf/publishandsubscribe/SubscribeMessageLog1.java

@@ -0,0 +1,45 @@
+package com.sf.publishandsubscribe;
+
+import com.rabbitmq.client.*;
+
+import java.io.IOException;
+import java.util.concurrent.TimeoutException;
+
+/**
+ * 消息的订阅
+ */
+public class SubscribeMessageLog1 {
+    //声明需要创建的交换器名称
+    private final static String EXCHANGE_NAME = "logs";
+    public static void main(String[] args) throws IOException, TimeoutException {
+        System.out.println("消费者客户端1");
+        //创建连接RabbitMQ服务器的连接
+        ConnectionFactory factory = new ConnectionFactory();
+        //设置连接RabbitMQ的服务器地址
+        factory.setHost("192.168.180.133");
+        //设置连接RabbitMQ的服务器AMQP端口号
+        factory.setPort(5672);
+        //创建一个连接
+        Connection connection = factory.newConnection();
+        //创建频道
+        Channel channel = connection.createChannel();
+        /*
+            创建一个名为logs,类型为fanout交换器
+            RabbitMQ客户端提供了交换器类型的枚举BuiltinExchangeType
+         */
+        channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.FANOUT);
+
+        //声明一个随机队列
+        String queueName = channel.queueDeclare().getQueue();
+        //将交换器和随机队列绑定到一起
+        channel.queueBind(queueName,EXCHANGE_NAME,"");
+
+        DeliverCallback deliverCallback = (consumerTag, delivery) -> {
+            //获取订阅到的消息
+            String message = new String(delivery.getBody());
+            System.out.println("订阅到的消息为: "+message);
+        };
+        //获取订阅到的消息
+        channel.basicConsume(queueName,true,deliverCallback,consumerTag -> { });
+    }
+}

+ 51 - 0
vip23-rabbitmq2/src/main/java/com/sf/publishandsubscribe/SubscribeMessageLog2.java

@@ -0,0 +1,51 @@
+package com.sf.publishandsubscribe;
+
+import com.rabbitmq.client.*;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.concurrent.TimeoutException;
+
+/**
+ * 消息的消费
+ */
+public class SubscribeMessageLog2 {
+    //声明需要创建的交换器名称
+    private final static String EXCHANGE_NAME = "logs";
+    public static void main(String[] args) throws IOException, TimeoutException {
+        System.out.println("消费者客户端2");
+        //创建连接RabbitMQ服务器的连接
+        ConnectionFactory factory = new ConnectionFactory();
+        //设置连接RabbitMQ的服务器地址
+        factory.setHost("192.168.180.133");
+        //设置连接RabbitMQ的服务器AMQP端口号
+        factory.setPort(5672);
+        //创建一个连接
+        Connection connection = factory.newConnection();
+        //创建频道
+        Channel channel = connection.createChannel();
+        /*
+            创建一个名为logs,类型为fanout交换器
+            RabbitMQ客户端提供了交换器类型的枚举BuiltinExchangeType
+         */
+        channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.FANOUT);
+        //声明一个随机队列
+        String queueName = channel.queueDeclare().getQueue();
+        //将交换器和随机队列绑定到一起
+        channel.queueBind(queueName,EXCHANGE_NAME,"");
+
+        DeliverCallback deliverCallback = (consumerTag, delivery) -> {
+            //获取订阅到的消息
+            String message = new String(delivery.getBody());
+            //将获取到的日志信息保存为本地文件 文件名为abc.log
+            FileOutputStream fos = new FileOutputStream(new File("abc.log"), true);
+            fos.write(message.getBytes());
+            fos.flush();
+            //关闭
+            fos.close();
+        };
+        //获取订阅到的消息
+        channel.basicConsume(queueName,true,deliverCallback,consumerTag -> { });
+    }
+}

+ 52 - 0
vip23-rabbitmq2/src/main/java/com/sf/route/PublishMessageLog.java

@@ -0,0 +1,52 @@
+package com.sf.route;
+
+import com.rabbitmq.client.BuiltinExchangeType;
+import com.rabbitmq.client.Channel;
+import com.rabbitmq.client.Connection;
+import com.rabbitmq.client.ConnectionFactory;
+
+import java.io.IOException;
+import java.util.concurrent.TimeoutException;
+
+/**
+ *
+ * route
+ */
+public class PublishMessageLog {
+
+    //声明需要创建的交换器名称
+    private final static String EXCHANGE_NAME = "route-logs";
+
+    public static void main(String[] args) throws IOException, TimeoutException {
+        //创建连接RabbitMQ服务器的连接
+        ConnectionFactory factory = new ConnectionFactory();
+        //设置连接RabbitMQ的服务器地址
+        factory.setHost("192.168.180.133");
+        //设置连接RabbitMQ的服务器AMQP端口号,如果不设置为默认值
+        factory.setPort(5672);
+        //创建一个连接
+        Connection connection = factory.newConnection();
+        //创建频道
+        Channel channel = connection.createChannel();
+        /*
+            创建一个名为logs,类型为direct交换器
+            RabbitMQ客户端提供了交换器类型的枚举BuiltinExchangeType
+         */
+        channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.DIRECT);
+
+        /*
+            模拟发送多个级别的日志库[info,debug,error]
+         */
+        String[] severities={"error","info","warning"};
+        for (int i = 0; i < severities.length; i++) {
+            //模拟待发送的消息
+            String message = "Hello RabbitMQ "+i+"\n";
+            //发送消息,每次发送之前指定 routingKey: 使用severities里面的值标记每条发送消息的日志级别(就是给每条消息设置路由key)
+            channel.basicPublish(EXCHANGE_NAME,severities[i],null,message.getBytes());
+        }
+        System.out.println("========消息发布完成========");
+        //关闭频道和连接
+        channel.close();
+        connection.close();
+    }
+}

+ 51 - 0
vip23-rabbitmq2/src/main/java/com/sf/route/SubscribeMessageLog1.java

@@ -0,0 +1,51 @@
+package com.sf.route;
+
+import com.rabbitmq.client.*;
+
+import java.io.IOException;
+import java.util.concurrent.TimeoutException;
+
+/**
+ * 客户端1
+ */
+public class SubscribeMessageLog1 {
+    //声明需要创建的交换器名称
+    private final static String EXCHANGE_NAME = "route-logs";
+    public static void main(String[] args) throws IOException, TimeoutException {
+        System.out.println("消费者客户端1");
+        //创建连接RabbitMQ服务器的连接
+        ConnectionFactory factory = new ConnectionFactory();
+        //设置连接RabbitMQ的服务器地址
+        factory.setHost("192.168.180.133");
+        //设置连接RabbitMQ的服务器AMQP端口号
+        factory.setPort(5672);
+        //创建一个连接
+        Connection connection = factory.newConnection();
+        //创建频道
+        Channel channel = connection.createChannel();
+        /*
+            创建一个名为logs,类型为direct交换器
+            RabbitMQ客户端提供了交换器类型的枚举BuiltinExchangeType
+         */
+        channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.DIRECT);
+        //声明一个随机队列
+        String queueName = channel.queueDeclare().getQueue();
+
+        /*
+            消费者1采用多重绑定的方式,订阅所有的日志级别的信息
+         */
+        String[] severities={"error","info","warning"};
+        for (String severity : severities) {
+            channel.queueBind(queueName,EXCHANGE_NAME,severity);
+        }
+
+
+        DeliverCallback deliverCallback = (consumerTag, delivery) -> {
+            //获取订阅到的消息
+            String message = new String(delivery.getBody());
+            System.out.println("订阅到的消息为: "+message);
+        };
+        //获取订阅到的消息
+        channel.basicConsume(queueName,true,deliverCallback,consumerTag -> { });
+    }
+}

+ 52 - 0
vip23-rabbitmq2/src/main/java/com/sf/route/SubscribeMessageLog2.java

@@ -0,0 +1,52 @@
+package com.sf.route;
+
+import com.rabbitmq.client.*;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.concurrent.TimeoutException;
+
+/**
+ * 客户端2
+ */
+public class SubscribeMessageLog2 {
+    //声明需要创建的交换器名称
+    private final static String EXCHANGE_NAME = "route-logs";
+    public static void main(String[] args) throws IOException, TimeoutException {
+        System.out.println("消费者客户端2");
+        //创建连接RabbitMQ服务器的连接
+        ConnectionFactory factory = new ConnectionFactory();
+        //设置连接RabbitMQ的服务器地址
+        factory.setHost("192.168.180.133");
+        //设置连接RabbitMQ的服务器AMQP端口号
+        factory.setPort(5672);
+        //创建一个连接
+        Connection connection = factory.newConnection();
+        //创建频道
+        Channel channel = connection.createChannel();
+        /*
+            创建一个名为logs,类型为direct交换器
+            RabbitMQ客户端提供了交换器类型的枚举BuiltinExchangeType
+         */
+        channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.DIRECT);
+        //声明一个随机队列
+        String queueName = channel.queueDeclare().getQueue();
+        //消费者2只绑定日志级别为error的消息
+        String routingKey = "error";
+        channel.queueBind(queueName,EXCHANGE_NAME,routingKey);
+
+        DeliverCallback deliverCallback = (consumerTag, delivery) -> {
+            //获取订阅到的消息
+            String message = new String(delivery.getBody());
+            //将获取到的日志信息保存为本地文件 文件名为abc.log
+            FileOutputStream fos = new FileOutputStream(new File("abcd.log"), true);
+            fos.write(message.getBytes());
+            fos.flush();
+            //关闭
+            fos.close();
+        };
+        //获取订阅到的消息
+        channel.basicConsume(queueName,true,deliverCallback,consumerTag -> { });
+    }
+}

+ 58 - 0
vip23-rabbitmq2/src/main/java/com/sf/topic/PublishMessageLog.java

@@ -0,0 +1,58 @@
+package com.sf.topic;
+
+import com.rabbitmq.client.BuiltinExchangeType;
+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 PublishMessageLog {
+    //声明需要创建的交换器名称
+    private final static String EXCHANGE_NAME = "logs2";
+
+    public static void main(String[] args) throws IOException, TimeoutException {
+        //创建连接RabbitMQ服务器的连接
+        ConnectionFactory factory = new ConnectionFactory();
+        //设置连接RabbitMQ的服务器地址
+        factory.setHost("192.168.180.133");
+        //设置连接RabbitMQ的服务器AMQP端口号,如果不设置为默认值
+        factory.setPort(5672);
+        //创建一个连接
+        Connection connection = factory.newConnection();
+        //创建频道
+        Channel channel = connection.createChannel();
+        /*
+            创建一个名为logs,类型为topic交换器
+            RabbitMQ客户端提供了交换器类型的枚举BuiltinExchangeType
+         */
+        channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.TOPIC);
+        /*
+            模拟多个服务["auth","cron","kern"]
+            模拟级别的日志库[info,debug,error]
+         */
+        String[] facilities ={"auth","cron","kern"};
+        String[] severities={"error","info","warning"};
+
+        //模拟发送所有设备(facilities)的所有级别(severities)的日志
+        for (int i = 0; i < facilities.length; i++) {
+            for (int j = 0; j <severities.length; j++) {
+                /*
+                    拼装routingKey
+                    格式为: auth.info  auth.waring auth.error
+                 */
+                String routingKey = facilities[i]+"."+severities[j];
+                // 设置发送的消息
+                String message = "["+facilities[i]+"."+severities[j]+"] Hello RabbitMQ i=" + i;
+                //发送
+                channel.basicPublish(EXCHANGE_NAME,routingKey,null,message.getBytes());
+                System.out.println("消息提供者发送的日志消息: "+message);
+            }
+        }
+        System.out.println("========消息发布完成========");
+        //关闭频道和连接
+        channel.close();
+        connection.close();
+    }
+}

+ 51 - 0
vip23-rabbitmq2/src/main/java/com/sf/topic/SubscribeMessageLog1.java

@@ -0,0 +1,51 @@
+package com.sf.topic;
+
+import com.rabbitmq.client.*;
+
+import java.io.IOException;
+import java.util.concurrent.TimeoutException;
+
+public class SubscribeMessageLog1 {
+    //声明需要创建的交换器名称
+    private final static String EXCHANGE_NAME = "logs2";
+    public static void main(String[] args) throws IOException, TimeoutException {
+        System.out.println("消费者客户端1");
+        //创建连接RabbitMQ服务器的连接
+        ConnectionFactory factory = new ConnectionFactory();
+        //设置连接RabbitMQ的服务器地址
+        factory.setHost("192.168.180.133");
+        //设置连接RabbitMQ的服务器AMQP端口号
+        factory.setPort(5672);
+        //创建一个连接
+        Connection connection = factory.newConnection();
+        //创建频道
+        Channel channel = connection.createChannel();
+        /*
+            创建一个名为logs,类型为topic交换器
+            RabbitMQ客户端提供了交换器类型的枚举BuiltinExchangeType
+         */
+        channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.TOPIC);
+        //声明一个随机队列
+        String queueName = channel.queueDeclare().getQueue();
+        /*
+            消费者1采用多重绑定的方式,订阅所有设备的日志级别的信息
+            所以我们需要构建routingKey来订阅发布者发布的信息
+            使用通配符过滤哪些消息被丢弃,哪些消息被消费打印到控制台
+            auth.*    : 订阅auth系统后面是一个单词的日志 比如 auth.info auth.warning auth.error
+            *.info    : 订阅info级别的并且前面是一个单词的日志 比如 auth.info等 如果前面有两个单词的如auth.abc.info 不会被订阅到
+            #.warning : 订阅所有系统的warning的级别日志,因为#匹配多个单词
+         */
+        String[] routingKeys ={"auth.*","*.info","#.warning"};
+        for (String routingKey : routingKeys) {
+            channel.queueBind(queueName,EXCHANGE_NAME,routingKey);
+        }
+
+        DeliverCallback deliverCallback = (consumerTag, delivery) -> {
+            //获取订阅到的消息
+            String message = new String(delivery.getBody());
+            System.out.println("订阅到的消息为: "+message);
+        };
+        //获取订阅到的消息
+        channel.basicConsume(queueName,true,deliverCallback,consumerTag -> { });
+    }
+}

+ 50 - 0
vip23-rabbitmq2/src/main/java/com/sf/topic/SubscribeMessageLog2.java

@@ -0,0 +1,50 @@
+package com.sf.topic;
+
+import com.rabbitmq.client.*;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.concurrent.TimeoutException;
+
+public class SubscribeMessageLog2 {
+
+    //声明需要创建的交换器名称
+    private final static String EXCHANGE_NAME = "logs2";
+    public static void main(String[] args) throws IOException, TimeoutException {
+        System.out.println("消费者客户端2");
+        //创建连接RabbitMQ服务器的连接
+        ConnectionFactory factory = new ConnectionFactory();
+        //设置连接RabbitMQ的服务器地址
+        factory.setHost("192.168.180.133");
+        //设置连接RabbitMQ的服务器AMQP端口号
+        factory.setPort(5672);
+        //创建一个连接
+        Connection connection = factory.newConnection();
+        //创建频道
+        Channel channel = connection.createChannel();
+        /*
+            创建一个名为logs,类型为topic交换器
+            RabbitMQ客户端提供了交换器类型的枚举BuiltinExchangeType
+         */
+        channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.TOPIC);
+        //声明一个随机队列
+        String queueName = channel.queueDeclare().getQueue();
+        //消费者2只订阅 auth系统级别为error的日志消息
+        String routingKey = "auth.error";
+        channel.queueBind(queueName,EXCHANGE_NAME,routingKey);
+
+        DeliverCallback deliverCallback = (consumerTag, delivery) -> {
+            //获取订阅到的消息
+            String message = new String(delivery.getBody());
+            //将获取到的日志信息保存为本地文件 文件名为abc.log
+            FileOutputStream fos = new FileOutputStream(new File("ab.log"), true);
+            fos.write(message.getBytes());
+            fos.flush();
+            //关闭
+            fos.close();
+        };
+        //获取订阅到的消息
+        channel.basicConsume(queueName,true,deliverCallback,consumerTag -> { });
+    }
+}

BIN
vip23-rabbitmq2/target/classes/com/sf/Random.class


BIN
vip23-rabbitmq2/target/classes/com/sf/chijiuhua/ConsumerMessage.class


BIN
vip23-rabbitmq2/target/classes/com/sf/chijiuhua/ProducerMessage.class


BIN
vip23-rabbitmq2/target/classes/com/sf/publishandsubscribe/PublishMessageLog.class


BIN
vip23-rabbitmq2/target/classes/com/sf/publishandsubscribe/SubscribeMessageLog1.class


BIN
vip23-rabbitmq2/target/classes/com/sf/publishandsubscribe/SubscribeMessageLog2.class


BIN
vip23-rabbitmq2/target/classes/com/sf/route/PublishMessageLog.class


BIN
vip23-rabbitmq2/target/classes/com/sf/route/SubscribeMessageLog1.class


BIN
vip23-rabbitmq2/target/classes/com/sf/route/SubscribeMessageLog2.class


BIN
vip23-rabbitmq2/target/classes/com/sf/topic/PublishMessageLog.class


BIN
vip23-rabbitmq2/target/classes/com/sf/topic/SubscribeMessageLog1.class


BIN
vip23-rabbitmq2/target/classes/com/sf/topic/SubscribeMessageLog2.class