rabbitMq-简单模式-java

简单模式



P:代表生产者,向队列中发送消息。
队列:保存生产者提供的数据。(队列的特点,先进先出)
C:代表消费者,负责将对列中的消息全部读取,并且完成特定的任务。
工作原理:生产者源源不断地向队列中发送消息。消费者只能从一个队列中读取消息,并处理。

[root@bogon rabbitmq-server-3.6.1]# cd /etc/rabbitmq

[root@bogon rabbitmq]# service rabbitmq-server start
Starting rabbitmq-server: SUCCESS
rabbitmq-server.er.

新增用户名密码,并设定管理员权限



本次密码为guest

点击Add usser

点击保存按钮,出现信息用户信息

添加虚拟主机


点击新增的这个student

点击Virtual Hosts

点击


绑定虚拟主机与用户
点击

往下滚动


上方出现studnet

再次点击虚拟主机

到此用户和虚拟主机绑定了




右键生成


pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.rabbit</groupId>
    <artifactId>schoolmanage</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
    <dependencies>
        <dependency>
            <groupId>com.rabbitmq</groupId>
            <artifactId>amqp-client</artifactId>
            <version>3.5.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.amqp</groupId>
            <artifactId>spring-rabbit</artifactId>
            <version>1.4.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
        </dependency>
    </dependencies>
</project>
package schoolmanage;

import java.io.IOException;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

public class TestStudentMsgDirectSend {
    private Connection connection=null;
    private String queueName="simple";
    @Before
    public void init() throws IOException{
        //创建连接工厂
        ConnectionFactory factory=new ConnectionFactory();
        factory.setHost("192.168.6.130");
        factory.setPort(5672);
        factory.setVirtualHost("/school");
        factory.setUsername("student");
        factory.setPassword("student");
        //创建连接
        connection=factory.newConnection();
    }
    //消息生产者
    @Test
    public void provider() throws IOException{
        //创建通道
        Channel channel=connection.createChannel();
        String msg="我要上学!!!——简单模式";
        channel.queueDeclare(queueName, false, false, false, null);
        channel.basicPublish("", queueName, null, msg.getBytes());
        channel.close();
        System.out.println("消息发送成功!!!");
    }
    @After
    public void close() throws IOException{
        connection.close();
    }
}


消息发送成功!!!

加入消费者代码后

package schoolmanage;

import java.io.IOException;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.QueueingConsumer;

public class TestStudentMsgDirectSend {
    private Connection connection=null;
    private String queueName="simple";
    @Before
    public void init() throws IOException{
        //创建连接工厂
        ConnectionFactory factory=new ConnectionFactory();
        //为工厂对象添加数据 
        //远程主机
        factory.setHost("192.168.6.130");
        //端口号
        factory.setPort(5672);
        //虚拟主机
        factory.setVirtualHost("/school");
        //用户名
        factory.setUsername("student");
        //密码
        factory.setPassword("student");
        //创建连接
        connection=factory.newConnection();
    }
    //消息生产者
    @Test
    public void provider() throws IOException{
        //创建通道
        Channel channel=connection.createChannel();
        String msg="我要上学!!!——简单模式";
        //创建队列
        /**
         * String queue, 队列的名称
         * boolean durable,持久化 false表示不持久化, true表示rabbitmq重启后会恢复队列的内容
         * boolean exclusive,服务器所独有,如果设置为true则消费者不能使用
         * boolean autoDelete,是否自动删除  当队列中没有消息时,该队列是否自动删除
         * Map<String, Object> arguments 额外的参数
         */
        channel.queueDeclare(queueName, false, false, false, null);
        /**
         * String exchange, 交换机的名称,如果需要交换机则添加名称 如果没有交换机 则为""串
         * String routingKey, 路由key 寻址的关键字,如果需要使用路由key定义特定的关键字(orderKey.xxx)
         * 如果不需要路由key,在简单模式中的添加队列的名称
         * BasicProperties props, 其他的配置,一般为null
         * byte[] body,表示需要发送的消息-字节码文件
         */
        channel.basicPublish("", queueName, null, msg.getBytes());
        //将流关闭
        channel.close();
        System.out.println("消息发送成功!!!");
    }
    //消费者
    @Test
    public void consumer() throws Exception{
        //获取通道
        Channel channel=connection.createChannel();
        //定义消息队列
        channel.queueDeclare(queueName,false,false,false,null);
        //创建消费者对象
        QueueingConsumer consumer=new QueueingConsumer(channel);
        //将消费者与队列进行绑定
        /**
         * String queue 队列名称,
         * boolean autoAck 是否自动回复 true自动回复 false手动回复, 
         * Consumer callback 一般消费者对象
         */
        channel.basicConsume(queueName,true,consumer);
        //消费者从队列中获取数据
        //通过迭代的方式遍历队列
        QueueingConsumer.Delivery nextDelivery = consumer.nextDelivery();
        String msg="消费者收到 :"+new String(nextDelivery.getBody());
        System.out.println(msg);
        channel.close();
    }
    @After
    public void close() throws IOException{
        connection.close();
    }
}



用student登录管理端可看到对列的名字
消费者收到 :我要上学!!!——简单模式
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • whoami 查看当前登录用户名 /etc/group文件包含所有组 /etc/shadow和/etc/passw...
    仙灵儿阅读 3,966评论 0 0
  • 1、第八章 Samba服务器2、第八章 NFS服务器3、第十章 Linux下DNS服务器配站点,域名解析概念命令:...
    哈熝少主阅读 9,172评论 0 10
  • win7 cmd管理员权限设置 net localgroup administrators 用户名 /add 把“...
    f675b1a02698阅读 10,753评论 0 11
  • 阳光明亮了天空,也唤醒了云的灵性,在这两种属性的天宇之间一切显的祥和温暖。与奔波繁杂的前日毫不相干。 ...
    犀照牛渚阅读 2,806评论 0 0
  • 有个20年的同学,一直非常感激她在生活中对我的照顾,直到有一天我将她带入了同一个公司,她开始对我有意见了!冷嘲热讽...
    竺子阅读 3,218评论 0 0

友情链接更多精彩内容