RabbitMQ共有六种工作模式:简单模式(Simple)、工作队列模
式(Work Queue)、发布订阅模式(Publish/Subscribe)、路由
模式(Routing)、通配符模式(Topics)、远程调用模式(RPC,
不常用)
导入依赖:
<dependencies>
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.14.0</version>
</dependency>
</dependencies>
package com.wyt.mq.simple;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.TimeoutException;
/***
*wyt
*/
//生产者
public class Product {
public static void main(String[] args) throws IOException, TimeoutException {
//1.创建链接工厂
ConnectionFactory connectionFactory = new ConnectionFactory();
connectionFactory.setHost("192.168.130.132");
connectionFactory.setPort(5672);
connectionFactory.setUsername("root");
connectionFactory.setPassword("root");
connectionFactory.setVirtualHost("/");
//2.创建链接
Connection connection = connectionFactory.newConnection();
//3.建立信道
Channel channel = connection.createChannel();
//4.创建队列,如果队列已经存在,则使用该队列
/**
* 队列名
* 是否持久化
* 是否私有化 f表示所有消费者都可访问,t表示只有第一次拥有他的消费者才可访问
* 是否自动删除
* 其他额外参数
*/
channel.queueDeclare("simple_queue",false,false,false,null);
//5.发送信息
String message="hello message";
/***
* 交换机,“”表示默认交换机
* 路由键,一个简单模式,使用队列名就行
* 额外参数
* 传递的消息字节数组
*/
channel.basicPublish("","simple_queue",null,message.getBytes(StandardCharsets.UTF_8));
//6.关闭信道和链接
channel.close();
connection.close();
System.out.println("====发送成功===");
}
}
package com.wyt.mq.simple;
import com.rabbitmq.client.*;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
/***
*wyt
*/
//消费者
public class Customer {
public static void main(String[] args) throws IOException, TimeoutException {
//1.创建链接工厂
ConnectionFactory connectionFactory = new ConnectionFactory();
connectionFactory.setHost("192.168.130.132");
connectionFactory.setPort(5672);
connectionFactory.setUsername("root");
connectionFactory.setPassword("root");
connectionFactory.setVirtualHost("/");
//2.创建链接
Connection connection = connectionFactory.newConnection();
//3.建立信道
Channel channel = connection.createChannel();
//4.监听队列
/**
* 监听的队列名
* 是否自动签收,false的话,需要手动确认消息已收到
* Consumer的实现类,重写该方法表示接受到消息后如何消费
*/
channel.basicConsume("simple_queue",true,new DefaultConsumer(channel){
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
String message=new String(body,"UTF-8");
System.out.println("接受消息为:"+message);
}
});
//5.
}
}
其特点:一个生产者对应一个消费者