RabbitMQ
【黑马程序员RabbitMQ全套教程,rabbitmq消息中间件到实战】
文章目录
- RabbitMQ
- 第一天 基础
- 3 RabbitMQ 快速入门
- 3.1 入门程序
- 3.1.1 生产者
第一天 基础
3 RabbitMQ 快速入门
3.1 入门程序
3.1.1 生产者
看下文档
点进去
先就来做一个 这个简单模式
- P:生产者
- C:消费者
- 中间红色的块:队列
【需求】使用简单模式完成消息传递
步骤:
① 创建工程(生成者、消费者)
② 分别添加依赖
③ 编写生产者发送消息
④ 编写消费者接收消息
来一个新的 空工程
直接创建
把送的 这个模块干掉
OK,干净了
添加 生产者模块
直接创建
OK,这就是 生产者模块
再来一个消费者 模块
OK, 直接创建
OK,两个 模块都准备 好了
【修改配置文件】
先在消费者 中
<?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.dingjiaxiong</groupId>
<artifactId>rabbitmq-consumer</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.6.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
OK
生产者 直接复制就可
OK了,
【编码】【生产者】
package com.dingjiaxiong.producer;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
/**
* ClassName: Producer_HelloWorld
* date: 2022/11/16 10:58
* 发送消息
* @author DingJiaxiong
*/
public class Producer_HelloWorld {
public static void main(String[] args) throws IOException, TimeoutException {
//1. 创建连接工厂
ConnectionFactory factory = new ConnectionFactory();
//2. 设置参数
factory.setHost("xxxxxxxxxx"); // 服务器IP【默认本机 localhost】
factory.setPort(5672); //端口【默认也是 5672】
factory.setVirtualHost("/ding"); //虚拟机【 默认是 /】
factory.setUsername("dingjiaxiong"); // 用户名【默认 guest】
factory.setPassword("12345"); //密码【默认 guest】
//3. 创建连接 Connection
Connection connection = factory.newConnection();
//4. 创建Channel
Channel channel = connection.createChannel();
//5. 创建队列Queue
/**
* queueDeclare(String queue, boolean durable, boolean exclusive, boolean autoDelete, Map<String, Object> arguments)
* 参数解释:
* 1. queue:队列名称
* 2. durable:是否持久化【当mq 重启之后,还在】
* 3. exclusive:
* - 是否独占。只能有一个消费者监听这队列
* - 当Connection 关闭时,是否删除队列
* 4.autoDelete:是否自动删除【当没有Consumer 时,自动删除掉】
* 5.arguments:一些参数信息
* */
//【如果没有一个名字叫hello_world 的队列,则会创建该队列,如果有则不会创建】
channel.queueDeclare("hello_world",true,false,false,null);
//6. 发送消息
/*
* basicPublish(String exchange, String routingKey, boolean mandatory, BasicProperties props, byte[] body)
* 参数解释:
* 1. exchange:交换机名称。简单模式下交换机会使用默认的【""】
* 2. routingKey:路由名称。
* 3. props:配置信息
* 4. body:发送消息数据
* */
String body = "hello,rabbitmq";
channel.basicPublish("","hello_world",null,body.getBytes());
//7. 释放资源
channel.close();
connection.close();
}
}
现在管控台 是没有队列 的
直接运行结果
OK,没有报错
再次查看 管控台
OK,队列和消息 都有了,消息还没有被消费,点进去看看
准备被消费的消息 有一个,总共的消息 也是一个
看看Connection ,
代码中 建立了又关闭了,所以这里依然啥也没有
交换机是用的 默认的交换机【可以看到 它有流量输送】
这次我们试试不关闭连接
可以看到,运行没有停止
再次查看管控台
这次就 有连接了
也有Channel 了
而且队列里 就有两条消息了
加上一列
OK
现在的 意思就是当前这个队列 没有消费者
【这就是生产者 基本的代码】