消息中间件RabbitMQ系列,利用代码将数据放到队列里面,使用直连模式,实现发送者(三)

2020-11-20 14:25:15 浏览数 (1)

之前已经讲解了如何安装这个软件,还有就是对管理界面的解释。现在我们上手使用一下这个软件吧。

回顾AMQP

之前我们已经讲过,这个rabbitmq软件就是基于这个AMQP协议的。

这个协议也是基于生产者和消费者模型的。

rabbitmq使用的图解

rabbitmq软件里面有虚拟主机 Virtual Host ,这个虚拟主机的意思就是和数据库一样,每一个数据库里面的东西属于哪个项目,这个可以区分。

所以现在我们有很多的项目都可以访问这一个rabbitmq软件,每一个项目就可以根据这个虚拟主机找到和自己相关的信息。

以后就是一个项目访问一个虚拟主机。每一个虚拟主机都要绑定一个用户,就是不同的用户访问不同的虚拟主机。

以后我们创建了虚拟主机,创建了用户,要将这两个进行绑定。

第一个rabbitmq的项目?

1 创建一个maven项目,里面导入依赖

代码语言:javascript复制
   <dependency>
          <groupId>com.rabbitmq</groupId>
          <artifactId>amqp-client</artifactId>
          <version>5.7.3</version>
      </dependency>

不管是消费者还是提供者项目,都只需要有这个依赖就可以和rabbitmq软件打交道了

2 在web管理的界面上面建立一个虚拟主机

点击了以上的按钮,就进入了创建虚拟主机的页面

以上就是创建了一个虚拟主机

我们再创建一个用户,让这个用户和这个虚拟主机进行绑定

以上步骤就是创建了一个用户,创建完成之后的界面是

之后给这个admin用户绑定虚拟主机,点击进去这个admin用户的详情

以上就是我们已经给这个admin用户创建了这个权限。

3 开发生产者子项目

前面已经在rabbitmq软件里面创建了新用户和虚拟主机,并且也进行了绑定。现在开始开发提供者项目。这个服务端的项目是要发消息 的,那么以什么模型进行发呢?rabbitmq提供了很多发消息的模型,现在开始先讲第一种,直连模型

直连模型

这个模型意思是,提供给你一个服务端,一个队列,一个消费者

代码实现发送者

之前已经导入了rabbitmq的依赖,现在直接创建一个java类,这个类里面需要做的就是用rabbitmq依赖里面的一个工厂类创建工厂对象,之后利用这个工厂对象就可以连接这个rabbitmq的软件了,就可以操作这个软件了。

因为这个先讲直连模式,就是只有队列,里面没有交换机的形式,所以我们在代码里面就不需要写和交换机相关的代码。

代码语言:javascript复制
public class provider {
    @Test
    public void SendMessage() throws IOException, TimeoutException {
//        创建连接mq的连接工厂对象,这个是依赖里面的类,我们只需要拿过来创建对象就可以了
        ConnectionFactory connectionFactory = new ConnectionFactory();
//        设置连接rabbitmq的ip
        connectionFactory.setHost("192.168.40.145");
//        设置端口号
        connectionFactory.setPort(5672);
//        设置连接的虚拟的主机
        connectionFactory.setVirtualHost("/ems");
//        设置访问虚拟主机的用户名和密码
        connectionFactory.setUsername("ems");
        connectionFactory.setPassword("123");
//        获取连接对象
        Connection connection = connectionFactory.newConnection();
//        创建通道
        Channel channel = connection.createChannel();
//        让通道和消息队列进行绑定
        channel.queueDeclare("hello",false,false,false,null);
        channel.basicPublish("","hello",null,"hello jing".getBytes());
        channel.close();
        connection.close();

    }
}

运行以上的代码之后,我们看控制台

以上是执行成功,这个执行完之后,意思就是已经利用代码 将消息发送到rabbitmq软件里面了,我们从rabbitmq软件的控制台里面看看有没有

以上的意思就是

在虚拟主机ems里面,有一个hello的队列

这个队列里面有一个消息,没有被消费了,我们再执行一次代码,看这个队列里面的变化

看,变为了2,说明这个hello的队列里面有2个消息还没有被消费。

这个管理界面有一个自动刷新的按钮

以上的工作 ,就是在队列里面已经利用代码放数据了。

之后,我们看看如何利用代码从队列里面拿数据

0 人点赞