第一种直连模型
在上面的模型中,有以下概念:
- P:生产者,也就是要发送消息的程序
- C:消费者,消息的接受者,会一直等待消息到来
- queue:消息队列,图中红色部分。类似于一个邮箱,可以缓存消息:生产者向其中投递消息,消费者从中取出消息
然后我们在web管理界面中设置新账号ems以及新的域/ems,如图所示分配权限
然后我们就可以编写测试代码
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import org.junit.Test;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
public class Provider {
//生产消息
@Test
public void testSendMessage() throws IOException, TimeoutException {
//创建mq的连接工厂对象
ConnectionFactory connectionFactory = new ConnectionFactory();
//设置连接rabbitmq的主机
connectionFactory.setHost("127.0.0.1");
//设置端口号
connectionFactory.setPort(5672);
//设置连接哪个虚拟主机
connectionFactory.setVirtualHost("/ems");
//设置访问虚拟主机的用户名和密码
connectionFactory.setUsername("ems");
connectionFactory.setPassword("ems");
//获取连接对象
Connection connection = connectionFactory.newConnection();
//获取连接中通道
Channel channel=connection.createChannel();
//通道绑定对应消息队列
//参数1:队列名称 如果队列不存在自动创建
//参数1:队列名称 如果队列不存在自动创建
//参数2:用来定义队列特性是否要持久化true/false
//参数3:exclusive是否独占队列true/false
//参数4:autoDelete是否在消费完成后自动删除队列true/false
//参数5:额外附加参数
channel.queueDeclare("hello",false,false,false,null);
//发布消息
//参数1:交换机名称
//参数2:队列名称
//参数3:传递消息额外设置
//参数4:消息的具体内容
channel.basicPublish("","hello",null,"hello rabbitmq".getBytes());
channel.close();
connection.close();
}
}
运行以后查看队列情况
这是我们采用直连的方式进行最简单的发布消息的测试