1. 我们先增加一个帐号
添加root帐号,用户名、密码都为root
rabbitmqctl add_user root root
设置一下主题权限
set_permissions -p / root ".*" ".*" ".*"
设置一下用户角色
rabbitmqctl set_user_tags root administrator
2. 引用maven依赖
这里我们使用rabbitmq的客户端试试看
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.14.1</version>
</dependency>
3. 消息发送
发送的代码
public class ClientTest {
private static final String EXCHANGE_NAME = "exchange_basic";
private static final String ROUTING_KEY = "routingkey_basic";
private static final String QUEUE_NAME = "queue_basic";
private static final int PORT = 5672;
public static void main(String[] args) throws IOException, TimeoutException {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
factory.setPort(PORT);
factory.setUsername("root");
factory.setPassword("root");
//创建连接
Connection conn = factory.newConnection();
//创建信道
Channel channel = conn.createChannel();
//创建一个direct类型,持久化、非自动删除的交换器
channel.exchangeDeclare(EXCHANGE_NAME, "direct",true, false, null);
//创建一个持久化、非排他的、非自动删除的队列
channel.queueDeclare(QUEUE_NAME, true, false, false, null);
//将交换器与队列通过路由器绑定
channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, ROUTING_KEY);
//发送一条消息
String message = "你好!";
channel.basicPublish(EXCHANGE_NAME, ROUTING_KEY, MessageProperties.PERSISTENT_TEXT_PLAIN, message.getBytes());
//关闭
channel.close();
conn.close();
}
}
路由查看
上面代码执行后,在管理页面的exchanges标签页,我们可以看到路由已经成功创建,并发送了一条消息

队列查看
切换到Queues标签,可以看到队列的详细情况

4. 接收消息
下面是接收的代码哈,放在刚才的类下,直接调用一下就好了哈
public static void receive() throws IOException, TimeoutException, InterruptedException {
Address[] addresses = new Address[] {
new Address("localhost",PORT)
};
ConnectionFactory factory = new ConnectionFactory();
factory.setUsername("root");
factory.setPassword("root");
Connection conn = factory.newConnection(addresses);
final Channel channel = conn.createChannel();
Consumer consumer = new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties, byte[] body)
throws IOException {
System.out.println("收到消息:" + new String(body));
channel.basicAck(envelope.getDeliveryTag(), false);
}
};
channel.basicConsume(QUEUE_NAME, consumer);
TimeUnit.SECONDS.sleep(5);
channel.close();
conn.close();
}
执行消费代码后,可以看消息成功消费了

网友评论