消费者Work01消费order路由键对应的队列,代码演示:
import com.rabbitmq.client.BuiltinExchangeType;
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 Work01 {
private static final ConnectionFactory factory = new ConnectionFactory();
private static Connection connection = null;
static {
factory.setHost("49.232.202.201");
factory.setUsername("gosuncn");
factory.setPassword("123123");
factory.setVirtualHost("/gosuncn");
try {
connection = factory.newConnection();
} catch (IOException | TimeoutException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws IOException {
Channel channel = connection.createChannel();
channel.exchangeDeclare(Constant.EXCHANGE_NAME, BuiltinExchangeType.DIRECT);
String queueName = channel.queueDeclare().getQueue();
channel.queueBind(queueName, Constant.EXCHANGE_NAME, "order");
channel.basicConsume(queueName, true, (consumerTag, message) -> {
System.out.println("DeliverCallback's consumerTag is {" + consumerTag + "}");
System.out.println("order队列消费消息的内容 = " + new String(message.getBody()));
}, consumerTag -> System.out.println("CancelCallback's consumerTag is {" + consumerTag + "}"));
}
}
消费者Work02消费email路由键对应的队列,代码演示:
import com.rabbitmq.client.BuiltinExchangeType;
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 Work02 {
private static final ConnectionFactory factory = new ConnectionFactory();
private static Connection connection = null;
static {
factory.setHost("49.232.202.201");
factory.setUsername("gosuncn");
factory.setPassword("123123");
factory.setVirtualHost("/gosuncn");
try {
connection = factory.newConnection();
} catch (IOException | TimeoutException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws IOException {
Channel channel = connection.createChannel();
channel.exchangeDeclare(Constant.EXCHANGE_NAME, BuiltinExchangeType.DIRECT);
String queueName = channel.queueDeclare().getQueue();
channel.queueBind(queueName, Constant.EXCHANGE_NAME, "email");
channel.basicConsume(queueName, true, (consumerTag, message) -> {
System.out.println("DeliverCallback's consumerTag is {" + consumerTag + "}");
System.out.println("email队列消费消息的内容 = " + new String(message.getBody()));
}, consumerTag -> System.out.println("CancelCallback's consumerTag is {" + consumerTag + "}"));
}
}
发送消息到交换机中:
package fun.gosuncn;
import com.rabbitmq.client.BuiltinExchangeType;
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 SendMessage {
private static final ConnectionFactory factory = new ConnectionFactory();
private static Connection connectionStatic = null;
static {
factory.setHost("49.232.202.201");
factory.setUsername("gosuncn");
factory.setPassword("123123");
factory.setVirtualHost("/gosuncn");
try {
connectionStatic = factory.newConnection();
} catch (IOException | TimeoutException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
try (Connection connection = connectionStatic; Channel channel = connection.createChannel()) {
channel.exchangeDeclare(Constant.EXCHANGE_NAME, BuiltinExchangeType.DIRECT);
channel.basicPublish(Constant.EXCHANGE_NAME, "order", null, ("order-888").getBytes());
channel.basicPublish(Constant.EXCHANGE_NAME, "email", null, ("email-666").getBytes());
System.out.println("消息已发送至交换机");
} catch (Exception exception) {
exception.printStackTrace();
}
}
}
我们向路由键为order的队列发送了消息order-888,向路由键为email的队列发送了消息email-666。运行一下,看看:

看下队列视图:

交换机视图中,有个apollo的交换机。可以查看一下,类型是direct。
本文通过Java代码展示了如何在RabbitMQ中使用直连模式发送消息到不同路由键对应的队列,并提供了消费者消费队列的示例。在实际运行中,可以看到消息成功发送到指定队列,并在队列和交换机视图中进行验证。
7705

被折叠的 条评论
为什么被折叠?



