|
@@ -0,0 +1,57 @@
|
|
|
|
|
+package space.anyi.rabbitMQ_learn.publish_subscribe;
|
|
|
|
|
+
|
|
|
|
|
+import java.util.Scanner;
|
|
|
|
|
+import com.rabbitmq.client.Channel;
|
|
|
|
|
+import com.rabbitmq.client.Connection;
|
|
|
|
|
+import com.rabbitmq.client.ConnectionFactory;
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * @ProjectName: RabbitMQ-learn
|
|
|
|
|
+ * @FileName: EmitLog
|
|
|
|
|
+ * @Author: 杨逸
|
|
|
|
|
+ * @Data:2025/10/7 21:47
|
|
|
|
|
+ * @Description: 信息生产者
|
|
|
|
|
+ */
|
|
|
|
|
+public class EmitLog {
|
|
|
|
|
+ //交换机的名称
|
|
|
|
|
+ private static final String EXCHANGE_NAME = "logs";
|
|
|
|
|
+ public static final Scanner input = new Scanner(System.in);
|
|
|
|
|
+
|
|
|
|
|
+ public static void main(String[] argv) throws Exception {
|
|
|
|
|
+ ConnectionFactory factory = new ConnectionFactory();
|
|
|
|
|
+ factory.setHost("localhost");
|
|
|
|
|
+ try (Connection connection = factory.newConnection();
|
|
|
|
|
+ Channel channel = connection.createChannel()) {
|
|
|
|
|
+ //1.声明一个交换机
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 第一个参数(exchange)是交换机的名称
|
|
|
|
|
+ * 第二个参数(type)是交换机的类型,支持的类型有:direct, topic, headers and fanout
|
|
|
|
|
+ * 这里使用fanout类型,即广播类型,会将消息发送给所有绑定到该交换机的队列
|
|
|
|
|
+ */
|
|
|
|
|
+ channel.exchangeDeclare(EXCHANGE_NAME, "fanout");
|
|
|
|
|
+
|
|
|
|
|
+ String queue1 = "queue1";
|
|
|
|
|
+ String queue2 = "queue2";
|
|
|
|
|
+ //2.声明队列
|
|
|
|
|
+ channel.queueDeclare(queue1, false, false, false, null);
|
|
|
|
|
+ channel.queueDeclare(queue2, false, false, false, null);
|
|
|
|
|
+
|
|
|
|
|
+ //3.绑定队列到交换机上(注意需要先声明队列才能绑定队列)
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 一个fanout交换机绑定多个信息队列(表示不同外部系统使用的消息队列)
|
|
|
|
|
+ * 第一个参数(queue)是队列的名称
|
|
|
|
|
+ * 第二个参数(exchange)是交换机的名称
|
|
|
|
|
+ * 第三个参数(routingKey)是路由键,这里使用空字符串表示不需要路由键
|
|
|
|
|
+ */
|
|
|
|
|
+ channel.queueBind(queue1, EXCHANGE_NAME, "");
|
|
|
|
|
+ channel.queueBind(queue2, EXCHANGE_NAME, "");
|
|
|
|
|
+
|
|
|
|
|
+ while (input.hasNext()) {
|
|
|
|
|
+ String message = input.nextLine();
|
|
|
|
|
+ //4.发布信息,向交换机发布信息
|
|
|
|
|
+ channel.basicPublish(EXCHANGE_NAME, "", null, message.getBytes("UTF-8"));
|
|
|
|
|
+ System.out.println(" [x] Sent '" + message + "'");
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+}
|