guyanqing 1 год назад
Родитель
Сommit
6c9bdd3013
28 измененных файлов с 734 добавлено и 0 удалено
  1. 7 0
      vip23-rabbitmq/.idea/misc.xml
  2. 8 0
      vip23-rabbitmq/.idea/modules.xml
  3. 19 0
      vip23-rabbitmq/.idea/workspace.xml
  4. 9 0
      vip23-rabbitmq/vip23-rabbitmq.iml
  5. 13 0
      vip23-rabbitmq2/.idea/compiler.xml
  6. 7 0
      vip23-rabbitmq2/.idea/encodings.xml
  7. 20 0
      vip23-rabbitmq2/.idea/jarRepositories.xml
  8. 14 0
      vip23-rabbitmq2/.idea/misc.xml
  9. 6 0
      vip23-rabbitmq2/.idea/vcs.xml
  10. 163 0
      vip23-rabbitmq2/.idea/workspace.xml
  11. 82 0
      vip23-rabbitmq2/pom.xml
  12. 46 0
      vip23-rabbitmq2/src/main/java/com/sf/fair/ConsumerWorkMessage1.java
  13. 52 0
      vip23-rabbitmq2/src/main/java/com/sf/fair/ConsumerWorkMessage2.java
  14. 46 0
      vip23-rabbitmq2/src/main/java/com/sf/fair/ProducerWorkMessage.java
  15. 46 0
      vip23-rabbitmq2/src/main/java/com/sf/hello/ConsumerMessage.java
  16. 46 0
      vip23-rabbitmq2/src/main/java/com/sf/hello/ProducerMessage.java
  17. 45 0
      vip23-rabbitmq2/src/main/java/com/sf/work/ConsumerWorkMessage1.java
  18. 45 0
      vip23-rabbitmq2/src/main/java/com/sf/work/ConsumerWorkMessage2.java
  19. 40 0
      vip23-rabbitmq2/src/main/java/com/sf/work/ProducerWorkMessage.java
  20. 20 0
      vip23-rabbitmq2/src/test/java/com/sf/AppTest.java
  21. BIN
      vip23-rabbitmq2/target/classes/com/sf/fair/ConsumerWorkMessage1.class
  22. BIN
      vip23-rabbitmq2/target/classes/com/sf/fair/ConsumerWorkMessage2.class
  23. BIN
      vip23-rabbitmq2/target/classes/com/sf/fair/ProducerWorkMessage.class
  24. BIN
      vip23-rabbitmq2/target/classes/com/sf/hello/ConsumerMessage.class
  25. BIN
      vip23-rabbitmq2/target/classes/com/sf/hello/ProducerMessage.class
  26. BIN
      vip23-rabbitmq2/target/classes/com/sf/work/ConsumerWorkMessage1.class
  27. BIN
      vip23-rabbitmq2/target/classes/com/sf/work/ConsumerWorkMessage2.class
  28. BIN
      vip23-rabbitmq2/target/classes/com/sf/work/ProducerWorkMessage.class

+ 7 - 0
vip23-rabbitmq/.idea/misc.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ExternalStorageConfigurationManager" enabled="true" />
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
+    <output url="file://$PROJECT_DIR$/out" />
+  </component>
+</project>

+ 8 - 0
vip23-rabbitmq/.idea/modules.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/vip23-rabbitmq.iml" filepath="$PROJECT_DIR$/vip23-rabbitmq.iml" />
+    </modules>
+  </component>
+</project>

+ 19 - 0
vip23-rabbitmq/.idea/workspace.xml

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ChangeListManager">
+    <list default="true" id="5435859b-17ba-45b6-8aae-11937b9679c5" name="Changes" comment="" />
+    <option name="SHOW_DIALOG" value="false" />
+    <option name="HIGHLIGHT_CONFLICTS" value="true" />
+    <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
+    <option name="LAST_RESOLUTION" value="IGNORE" />
+  </component>
+  <component name="ProjectId" id="2VBgRL6JENSuBxhCfeWGjmEq5Ts" />
+  <component name="ProjectViewState">
+    <option name="showLibraryContents" value="true" />
+  </component>
+  <component name="PropertiesComponent"><![CDATA[{
+  "keyToString": {
+    "WebServerToolWindowFactoryState": "false"
+  }
+}]]></component>
+</project>

+ 9 - 0
vip23-rabbitmq/vip23-rabbitmq.iml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$" />
+    <orderEntry type="jdk" jdkName="1.8" jdkType="JavaSDK" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>

+ 13 - 0
vip23-rabbitmq2/.idea/compiler.xml

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="CompilerConfiguration">
+    <annotationProcessing>
+      <profile name="Maven default annotation processors profile" enabled="true">
+        <sourceOutputDir name="target/generated-sources/annotations" />
+        <sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
+        <outputRelativeToContentRoot value="true" />
+        <module name="vip23-rabbitmq2" />
+      </profile>
+    </annotationProcessing>
+  </component>
+</project>

+ 7 - 0
vip23-rabbitmq2/.idea/encodings.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Encoding">
+    <file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
+  </component>
+</project>

+ 20 - 0
vip23-rabbitmq2/.idea/jarRepositories.xml

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="RemoteRepositoriesConfiguration">
+    <remote-repository>
+      <option name="id" value="central" />
+      <option name="name" value="Central Repository" />
+      <option name="url" value="http://maven.aliyun.com/nexus/content/groups/public/" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="central" />
+      <option name="name" value="Maven Central repository" />
+      <option name="url" value="https://repo1.maven.org/maven2" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="jboss.community" />
+      <option name="name" value="JBoss Community repository" />
+      <option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
+    </remote-repository>
+  </component>
+</project>

+ 14 - 0
vip23-rabbitmq2/.idea/misc.xml

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ExternalStorageConfigurationManager" enabled="true" />
+  <component name="MavenProjectsManager">
+    <option name="originalFiles">
+      <list>
+        <option value="$PROJECT_DIR$/pom.xml" />
+      </list>
+    </option>
+  </component>
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
+    <output url="file://$PROJECT_DIR$/out" />
+  </component>
+</project>

+ 6 - 0
vip23-rabbitmq2/.idea/vcs.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$/.." vcs="Git" />
+  </component>
+</project>

+ 163 - 0
vip23-rabbitmq2/.idea/workspace.xml

@@ -0,0 +1,163 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="AutoImportSettings">
+    <option name="autoReloadType" value="SELECTIVE" />
+  </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" />
+    </list>
+    <option name="SHOW_DIALOG" value="false" />
+    <option name="HIGHLIGHT_CONFLICTS" value="true" />
+    <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
+    <option name="LAST_RESOLUTION" value="IGNORE" />
+  </component>
+  <component name="FileTemplateManagerImpl">
+    <option name="RECENT_TEMPLATES">
+      <list>
+        <option value="Class" />
+      </list>
+    </option>
+  </component>
+  <component name="Git.Settings">
+    <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$/.." />
+  </component>
+  <component name="MarkdownSettingsMigration">
+    <option name="stateVersion" value="1" />
+  </component>
+  <component name="ProjectId" id="2VBgdf4YCahbQ1g3ZPRwtHT00ey" />
+  <component name="ProjectLevelVcsManager" settingsEditedManually="true">
+    <ConfirmationsSetting value="2" id="Add" />
+  </component>
+  <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>
+  <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" />
+      <module name="vip23-rabbitmq2" />
+      <extension name="coverage">
+        <pattern>
+          <option name="PATTERN" value="com.sf.work.*" />
+          <option name="ENABLED" value="true" />
+        </pattern>
+      </extension>
+      <method v="2">
+        <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" />
+      <module name="vip23-rabbitmq2" />
+      <extension name="coverage">
+        <pattern>
+          <option name="PATTERN" value="com.sf.work.*" />
+          <option name="ENABLED" value="true" />
+        </pattern>
+      </extension>
+      <method v="2">
+        <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" />
+      <module name="vip23-rabbitmq2" />
+      <extension name="coverage">
+        <pattern>
+          <option name="PATTERN" value="com.sf.fair.*" />
+          <option name="ENABLED" value="true" />
+        </pattern>
+      </extension>
+      <method v="2">
+        <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" />
+      <module name="vip23-rabbitmq2" />
+      <extension name="coverage">
+        <pattern>
+          <option name="PATTERN" value="com.sf.fair.*" />
+          <option name="ENABLED" value="true" />
+        </pattern>
+      </extension>
+      <method v="2">
+        <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" />
+      <module name="vip23-rabbitmq2" />
+      <extension name="coverage">
+        <pattern>
+          <option name="PATTERN" value="com.sf.fair.*" />
+          <option name="ENABLED" value="true" />
+        </pattern>
+      </extension>
+      <method v="2">
+        <option name="Make" enabled="true" />
+      </method>
+    </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" />
+      </list>
+    </recent_temporary>
+  </component>
+  <component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
+  <component name="TaskManager">
+    <task active="true" id="Default" summary="Default task">
+      <changelist id="336408f8-f508-43fa-862f-2a486d9e0671" name="Changes" comment="" />
+      <created>1694314976610</created>
+      <option name="number" value="Default" />
+      <option name="presentableId" value="Default" />
+      <updated>1694314976610</updated>
+      <workItem from="1694314978194" duration="8819000" />
+    </task>
+    <servers />
+  </component>
+  <component name="TypeScriptGeneratedFilesManager">
+    <option name="version" value="3" />
+  </component>
+  <component name="XSLT-Support.FileAssociations.UIState">
+    <expand />
+    <select />
+  </component>
+</project>

+ 82 - 0
vip23-rabbitmq2/pom.xml

@@ -0,0 +1,82 @@
+<?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>com.sf</groupId>
+  <artifactId>vip23-rabbitmq2</artifactId>
+  <version>1.0-SNAPSHOT</version>
+
+  <name>vip23-rabbitmq2</name>
+  <!-- FIXME change it to the project's website -->
+  <url>http://www.example.com</url>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    <maven.compiler.source>1.8</maven.compiler.source>
+    <maven.compiler.target>1.8</maven.compiler.target>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>4.11</version>
+      <scope>test</scope>
+    </dependency>
+
+<!--    rabbitmq的依赖-->
+    <dependency>
+      <groupId>com.rabbitmq</groupId>
+      <artifactId>amqp-client</artifactId>
+      <version>5.8.0</version>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
+      <plugins>
+        <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
+        <plugin>
+          <artifactId>maven-clean-plugin</artifactId>
+          <version>3.1.0</version>
+        </plugin>
+        <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
+        <plugin>
+          <artifactId>maven-resources-plugin</artifactId>
+          <version>3.0.2</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-compiler-plugin</artifactId>
+          <version>3.8.0</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-surefire-plugin</artifactId>
+          <version>2.22.1</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-jar-plugin</artifactId>
+          <version>3.0.2</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-install-plugin</artifactId>
+          <version>2.5.2</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-deploy-plugin</artifactId>
+          <version>2.8.2</version>
+        </plugin>
+        <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
+        <plugin>
+          <artifactId>maven-site-plugin</artifactId>
+          <version>3.7.1</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-project-info-reports-plugin</artifactId>
+          <version>3.0.0</version>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+  </build>
+</project>

+ 46 - 0
vip23-rabbitmq2/src/main/java/com/sf/fair/ConsumerWorkMessage1.java

@@ -0,0 +1,46 @@
+package com.sf.fair;
+
+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;
+
+/**
+ * 公平分发--消息消费者1
+ */
+public class ConsumerWorkMessage1 {
+    //声明要获取消息的队列名称
+    private final static String QUEUE_NAME = "fairHello";
+
+    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();
+        //声明一个队列,现在只关注第1个参数,队列名称,后面其他参数会在下面的例子中一个个讲解
+        channel.queueDeclare(QUEUE_NAME,false,false,false,null);
+        //保证发送给消费者的消息只分发一次
+        channel.basicQos(1);
+        DeliverCallback deliverCallback = (consumerTag, delivery) -> {
+            String message = new String(delivery.getBody(), "UTF-8");
+            System.out.println(" [x] Received '" + message + "'");
+            //开启手动消息应答
+            channel.basicAck(delivery.getEnvelope().getDeliveryTag(),false);
+        };
+        /*
+            消费队列里面的消息
+            参数介绍: 这里只说第2个参数,其他参数前面已经说过
+            第2个参数 autoAck : false
+         */
+        channel.basicConsume(QUEUE_NAME,false,deliverCallback,consumerTag -> {});
+    }
+}

+ 52 - 0
vip23-rabbitmq2/src/main/java/com/sf/fair/ConsumerWorkMessage2.java

@@ -0,0 +1,52 @@
+package com.sf.fair;
+
+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;
+
+/**
+ * 公平分发 --- 消费者2
+ */
+public class ConsumerWorkMessage2 {
+    //声明要获取消息的队列名称
+    private final static String QUEUE_NAME = "fairHello";
+
+    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();
+        //声明一个队列,现在只关注第1个参数,队列名称,后面其他参数会在下面的例子中一个个讲解
+        channel.queueDeclare(QUEUE_NAME,false,false,false,null);
+        //保证发送给消费者的消息只分发一次
+        channel.basicQos(1);
+        DeliverCallback deliverCallback = (consumerTag, delivery) -> {
+            String message = new String(delivery.getBody(), "UTF-8");
+            System.out.println(" [x] Received '" + message + "'");
+            //给一个消费者开启一点延时,模拟性能问题
+            try {
+                Thread.sleep(10);
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+            //开启手动消息应答
+            channel.basicAck(delivery.getEnvelope().getDeliveryTag(),false);
+        };
+        /*
+            消费队列里面的消息
+            参数介绍: 这里只说第2个参数,其他参数前面已经说过
+            第2个参数 autoAck : false
+         */
+        channel.basicConsume(QUEUE_NAME,false,deliverCallback,consumerTag -> {});
+    }
+}

+ 46 - 0
vip23-rabbitmq2/src/main/java/com/sf/fair/ProducerWorkMessage.java

@@ -0,0 +1,46 @@
+package com.sf.fair;
+
+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 ProducerWorkMessage {
+
+    //声明一个队列名称
+    private static final String QUEUE_NAME="fairHello";
+
+    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();
+        //声明一个队列,现在只关注第1个参数,队列名称,后面其他参数会在下面的例子中一个个讲解
+        channel.queueDeclare(QUEUE_NAME,false,false,false,null);
+        //限制发送消息给同一个消费者不得超过一条
+        // ps:发送方可以不设置这个,因为只在消费方设置就可以
+        int prefetchCount = 1;
+        channel.basicQos(prefetchCount);
+
+        //构建10条消息并且发送到队列
+        for (int i = 0; i < 10; i++) {
+            String message = "fair  Hello RabbitMQ i="+i;
+            channel.basicPublish("",QUEUE_NAME,null,message.getBytes());
+            System.out.println(" [x] Sent '" + message + "'");
+        }
+        //关闭频道和连接
+        channel.close();
+        connection.close();
+    }
+}

+ 46 - 0
vip23-rabbitmq2/src/main/java/com/sf/hello/ConsumerMessage.java

@@ -0,0 +1,46 @@
+package com.sf.hello;
+
+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 = "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();
+        //声明一个队列,现在只关注第1个参数,队列名称,后面其他参数会在下面的例子中一个个讲解
+        channel.queueDeclare(QUEUE_NAME,false,false,false,null);
+
+        DeliverCallback deliverCallback = (consumerTag, message) -> {
+            String messageinfo = new String(message.getBody(), "UTF-8");
+            System.out.println(" [x] Received '" + messageinfo + "'");
+        };
+        /*
+            消费队列里面的消息
+            参数介绍: 暂时只关注第1、3、4这三个参数,第二个参数在下面的案例中会介绍到
+            第1个参数: 设置待消费的队列名称
+            第3个参数: 当消息被传递过来时,回调
+            第4个参数: 当消费者被意外取消或关闭时回调
+         */
+        channel.basicConsume(QUEUE_NAME,true,deliverCallback,consumerTag -> {});
+    }
+
+}

+ 46 - 0
vip23-rabbitmq2/src/main/java/com/sf/hello/ProducerMessage.java

@@ -0,0 +1,46 @@
+package com.sf.hello;
+
+import com.rabbitmq.client.Channel;
+import com.rabbitmq.client.Connection;
+import com.rabbitmq.client.ConnectionFactory;
+
+/**
+ * 消息的发送者
+ */
+public class ProducerMessage {
+    //声明一个队列
+        private static final String QUEUE_NAME="hello";
+    public static void main(String[] args) throws Exception {
+        //创建连接RabbitMQ服务器的连接
+        ConnectionFactory connectionFactory = new ConnectionFactory();
+        connectionFactory.setHost("192.168.180.133");
+        connectionFactory.setPort(5672);
+        //用户名和密码不用设置  都是默认的guest
+        //创建一个连接
+        Connection connection = connectionFactory.newConnection();
+        Channel channel = connection.createChannel();
+        //声明一个队列,现在只关注第1个参数,队列名称,后面其他参数会在下面的例子中一个个讲解
+        channel.queueDeclare(QUEUE_NAME,false,false,false,null);
+        String message = "hello2";
+        /*
+            向队列中发送上面的message消息
+            里面涉及到两个参数
+            第2个参数  routingKey : 指定发送队列的名称
+            第4个参数  body       : 设置需要发送的消息,byte数组格式
+            其它参数会在后面介绍其它功能时详解
+         */
+        channel.basicPublish("",QUEUE_NAME,null,message.getBytes());
+        System.out.println(" [x] Sent '" + message + "'");
+        //关闭频道和连接
+        channel.close();
+        connection.close();
+    }
+
+
+
+
+
+
+
+
+}

+ 45 - 0
vip23-rabbitmq2/src/main/java/com/sf/work/ConsumerWorkMessage1.java

@@ -0,0 +1,45 @@
+package com.sf.work;
+
+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;
+
+/**
+ * 工作队列消费者1
+ */
+public class ConsumerWorkMessage1 {
+    //声明要获取消息的队列名称
+    private final static String QUEUE_NAME = "workHello";
+
+    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();
+        //声明一个队列,现在只关注第1个参数,队列名称,后面其他参数会在下面的例子中一个个讲解
+        channel.queueDeclare(QUEUE_NAME,false,false,false,null);
+
+        DeliverCallback deliverCallback = (consumerTag, delivery) -> {
+            String message = new String(delivery.getBody(), "UTF-8");
+            System.out.println(" [x] Received '" + message + "'");
+        };
+        /*
+            消费队列里面的消息
+            参数介绍: 暂时只关注第1、3、4这三个参数,第二个参数在下面的案例中会介绍到
+            第1个参数: 设置待消费的队列名称
+            第3个参数: 当消息被传递过来时,回调
+            第4个参数: 当消费者被意外取消或关闭时回调
+         */
+        channel.basicConsume(QUEUE_NAME,true,deliverCallback,consumerTag -> {});
+    }
+}

+ 45 - 0
vip23-rabbitmq2/src/main/java/com/sf/work/ConsumerWorkMessage2.java

@@ -0,0 +1,45 @@
+package com.sf.work;
+
+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;
+
+/**
+ * 工作队列消费者2
+ */
+public class ConsumerWorkMessage2 {
+    //声明要获取消息的队列名称
+    private final static String QUEUE_NAME = "workHello";
+
+    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();
+        //声明一个队列,现在只关注第1个参数,队列名称,后面其他参数会在下面的例子中一个个讲解
+        channel.queueDeclare(QUEUE_NAME,false,false,false,null);
+
+        DeliverCallback deliverCallback = (consumerTag, delivery) -> {
+            String message = new String(delivery.getBody(), "UTF-8");
+            System.out.println(" [x] Received '" + message + "'");
+        };
+        /*
+            消费队列里面的消息
+            参数介绍: 暂时只关注第1、3、4这三个参数,第二个参数在下面的案例中会介绍到
+            第1个参数: 设置待消费的队列名称
+            第3个参数: 当消息被传递过来时,回调
+            第4个参数: 当消费者被意外取消或关闭时回调
+         */
+        channel.basicConsume(QUEUE_NAME,true,deliverCallback,consumerTag -> {});
+    }
+}

+ 40 - 0
vip23-rabbitmq2/src/main/java/com/sf/work/ProducerWorkMessage.java

@@ -0,0 +1,40 @@
+package com.sf.work;
+
+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 ProducerWorkMessage {
+    //声明一个队列名称
+    private static final String QUEUE_NAME="workHello";
+
+    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();
+        //声明一个队列,现在只关注第1个参数,队列名称,后面其他参数会在下面的例子中一个个讲解
+        channel.queueDeclare(QUEUE_NAME,false,false,false,null);
+        //构建10条消息并且发送到队列
+        for (int i = 0; i < 10; i++) {
+            String message = "Hello RabbitMQ i="+i;
+            channel.basicPublish("",QUEUE_NAME,null,message.getBytes());
+            System.out.println(" [x] Sent '" + message + "'");
+        }
+        //关闭频道和连接
+        channel.close();
+        connection.close();
+    }
+}

+ 20 - 0
vip23-rabbitmq2/src/test/java/com/sf/AppTest.java

@@ -0,0 +1,20 @@
+package com.sf;
+
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest 
+{
+    /**
+     * Rigorous Test :-)
+     */
+    @Test
+    public void shouldAnswerWithTrue()
+    {
+        assertTrue( true );
+    }
+}

BIN
vip23-rabbitmq2/target/classes/com/sf/fair/ConsumerWorkMessage1.class


BIN
vip23-rabbitmq2/target/classes/com/sf/fair/ConsumerWorkMessage2.class


BIN
vip23-rabbitmq2/target/classes/com/sf/fair/ProducerWorkMessage.class


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


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


BIN
vip23-rabbitmq2/target/classes/com/sf/work/ConsumerWorkMessage1.class


BIN
vip23-rabbitmq2/target/classes/com/sf/work/ConsumerWorkMessage2.class


BIN
vip23-rabbitmq2/target/classes/com/sf/work/ProducerWorkMessage.class