RabbitMQ模式の直连模式
1、说明
一个生产者P发送消息到队列Q,一个消费者C接收
2、模型图
3、代码示例
3.1、生产者
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import java.io.IOException;
import java.util.Objects;
import java.util.concurrent.TimeoutException;
import static java.nio.charset.StandardCharsets.UTF_8;
import static org.apache.commons.lang3.StringUtils.EMPTY;
public class Publisher {
private static final String MQ_VIRTUAL_HOST = "VHOST::TUTORIAL";
private static final String MQ_QUEUE_NAME = "QUEUE::TUTORIAL";
public static void main(String[] args) {
Connection connection = null;
Channel channel = null;
try {
final ConnectionFactory factory = new ConnectionFactory();
factory.setHost("127.0.0.1");
factory.setPort(5672);
factory.setUsername("admin");
factory.setPassword("romens");
factory.setVirtualHost(MQ_VIRTUAL_HOST);
connection = factory.newConnection();
channel = connection.createChannel();
/*
* 如果RabbitMQ服务器已经建好了队列,可以不用再声明创建队列(若队列已存在,则不再新建)
* 参数说明:
* queue – 队列名称
* durable – 该队列是否持久化
* exclusive – 该队列是否独占
* autoDelete – 长时间未使用服务器是否自动删除
* arguments – 附加参数
*/
// channel.queueDeclare("QUEUE::CHAPTER01", false, false, false, null);
channel.basicPublish(EMPTY, MQ_QUEUE_NAME, null, "Hello Kitty".getBytes(UTF_8));
} catch (IOException | TimeoutException e) {
e.printStackTrace();
} finally {
if (Objects.nonNull(channel)) {
try {
channel.close();
} catch (IOException | TimeoutException e) {
e.printStackTrace();
}
}
if (Objects.nonNull(connection)) {
try {
connection.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
3.2、消费者
import com.rabbitmq.client.*;
import java.io.IOException;
import java.util.Objects;
import java.util.concurrent.TimeoutException;
import static java.nio.charset.StandardCharsets.UTF_8;
public class Consumer {
private static final String MQ_VIRTUAL_HOST = "VHOST::TUTORIAL";
private static final String MQ_QUEUE_NAME = "QUEUE::TUTORIAL";
public static void main(String[] args) {
Connection connection = null;
Channel channel = null;
try {
final ConnectionFactory factory = new ConnectionFactory();
factory.setHost("127.0.0.1");
factory.setPort(5672);
factory.setUsername("admin");
factory.setPassword("romens");
factory.setVirtualHost(MQ_VIRTUAL_HOST);
connection = factory.newConnection();
channel = connection.createChannel();
System.out.println("[*] Waiting for messages. To exits press CTRL+C");
final DefaultConsumer consumer = new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) {
System.out.println(" [X] Received '" + new String(body, UTF_8) + "'");
}
};
channel.basicConsume(MQ_QUEUE_NAME, false, consumer);
while (true) {
synchronized (consumer) {
try {
consumer.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
} catch (IOException | TimeoutException e) {
e.printStackTrace();
} finally {
if (Objects.nonNull(channel)) {
try {
channel.close();
} catch (IOException | TimeoutException e) {
e.printStackTrace();
}
}
if (Objects.nonNull(connection)) {
try {
connection.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
-----------------------------------------------------------------------------------------------------------
薔薇猛虎皆成個性,陽光雨露俱是天恩!
薔薇猛虎皆成個性,陽光雨露俱是天恩!