欢迎来到DIVCSS5查找CSS资料与学习DIV CSS布局技术!
1 RabbitMQ
 
基于AMQP协议,erlang语言开发, 是部署最广泛的开源消息中间件,是最受欢迎的开源消息中间件之一。
 
官网:https://www.rabbitmq.com/
 
官方教程:https://www.rabbitmq.com/getstarted.html
 
AMQP协议
 
AMQP (advanced message queuing protocol,翻译是:高级消息队列协议)、 在2003年时被提出, 最早用于解决金融领不同平台之间的消息传递交互问题。顾名思义,AMQP是- 种协议,更准确的说是一种binary wirelevel protocol (链接协议)。 这是其和JMS的本质差别,AMQP不从API层进行限定, 而是直接定义网络交换的数据格式。这使得实现了AMQP的provider天然性就是跨平台的。以下是AMQP协议模型:
 
 生产者把消息,发送给交换机。交换机和队列是一一绑定就是点对点,交换机路由到其他队列,可以做路由。
 
2 RabbitMQ支持的消息模型
 
2.1官网
 
https://www.rabbitmq.com/getstarted.html
 
2.2引入依赖
 
    <!--引入rabbitmq的相关依赖-->
 
    <dependency>
 
      <groupId>com.rabbitmq</groupId>
 
      <artifactId>amqp-client</artifactId>
 
      <version>5.7.3</version>
 
    </dependency>
 
为什么写测试代码需要把下面这行删掉?因为这是作用范围,
 
    <dependency>
 
      <groupId>junit</groupId>
 
      <artifactId>junit</artifactId>
 
      <version>4.11</version>
 
<!--      <scope>test</scope>-->
 
    </dependency>
 
2.3第一种模型(直连)
 
在上图的模型中,有以下概念:
 
P:生产者,也就是要发送消息的程序
 
C:消费者:消息的接受者,会-直等待消息到来。
 
queue:消息队列,图中红色部分。类似一个邮箱,可以缓存消息;生产者向其中投递消息,消费者从其中取出消息。
 
1.开发生产者
 
public class Provider {
 
    private final static String QUEUE_NAME = "hello";
 
    public static void main(String[] argv) throws Exception {
 
        // 创建到服务器的连接
 
        ConnectionFactory factory = new ConnectionFactory();
 
        // 连接rabbitmq主机
 
        factory.setHost("192.168.231.141");
 
        // 设置端口号
 
        factory.setPort(5672);
 
        // 设置连接那个虚拟主机
 
        factory.setVirtualHost("/ems");
 
        // 设置访问虚拟主机的用户名和密码
 
        factory.setUsername("ems");
 
        factory.setPassword("123456");
 
        // 获取连接对象
 
        try (Connection connection = factory.newConnection();
 
            // 获取连接中的通道对象
 
            Channel channel = connection.createChannel()) {
 
            // 通道绑定对应消息队列
 
                // 参数1.队列名 如果队列不存在,自动创建
 
                // 2. durable 用来定义队列的特性是否要持久化 true 持久化
 
                // 3. 是否独占队列 true独占
 
                // 4. 是否在消费完成后,自动删除队列, true 自动删除
 
                // 5. 额外参数
 
            channel.queueDeclare(QUEUE_NAME, false, false, false, null);
 
            String message = "Hello World!";
 
            // 发布消息
 
                // 1.交换机名称,因为没有交换机,所以为空
 
                // 2.队列名
 
                // 3.发布消息时的属性|传递消息的额外设置
 
                // 4.发布消息的具体内容,要求是字节类型的数组,
 
            channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
 
            System.out.println(" [x] Sent '" + message + "'");
 
        }
 
    }
 
}

如需转载,请注明文章出处和来源网址:http://www.divcss5.com/html/h65212.shtml