RabbitMQ系列之一:HelloWorld

server端代码:

 1 package com.example.helloworld;
 2
 3 import java.io.IOException;
 4
 5 import com.rabbitmq.client.Channel;
 6 import com.rabbitmq.client.Connection;
 7 import com.rabbitmq.client.ConnectionFactory;
 8
 9 public class Send {
10
11     public static void main(String[] args) throws IOException {
12
13         // 队列名称
14         String queueName = "HELLO";
15
16         ConnectionFactory factory = new ConnectionFactory();
17
18         //远程服务器ip,如果在本地测试可以改成localhost
19         factory.setHost("121.40.151.120");
20
21         //不是在本地测试,用户名和密码必填
22         factory.setUsername("rabbitmqname");
23         factory.setPassword("rabbitmqpwd");
24
25         Connection conn = factory.newConnection();
26         Channel channel = conn.createChannel();
27
28         /**
29          * 参数说明:
30          * queue:队列名称
31          * durable:队列数据是否可以持久化,true:是,false:否,也就是服务重启后队列数据是否依然存在
32          * exclusive:是否为某一个队列的专用连接
33          * autoDelete:当队列不再被使用也就是没有消费者的时候是否自动删除
34          * arguments:其它参数,比如队列存活时间
35         */
36         channel.queueDeclare(queueName, false, false, false, null);
37         String message = "Hello World!";
38
39         /**
40          * 参数说明:
41          * exchange:默认的exchange就是"",是direct类型的,
42          *             任何发往到默认exchange的消息都会被路由到routingKey的名字对应的队列上,如果没有对应的队列,则消息会被丢弃。
43          * routingKey:指定接收消息的队列
44          * props:其它属性,比如消息路由头信息
45          * body:消息内容
46         */
47         channel.basicPublish("", queueName, null, message.getBytes());
48
49         System.out.println("[" + message + "]");
50
51         // 最后,我们关闭channel和连接,释放资源。
52         channel.close();
53         conn.close();
54     }
55
56 }

client端代码:

 1 package com.example.helloworld;
 2
 3 import java.io.IOException;
 4
 5 import com.rabbitmq.client.Channel;
 6 import com.rabbitmq.client.Connection;
 7 import com.rabbitmq.client.ConnectionFactory;
 8 import com.rabbitmq.client.ConsumerCancelledException;
 9 import com.rabbitmq.client.QueueingConsumer;
10 import com.rabbitmq.client.ShutdownSignalException;
11
12 public class Recv {
13
14     public static void main(String[] args) throws IOException, ShutdownSignalException,
15         ConsumerCancelledException, InterruptedException {
16
17         // 队列名称
18         String queueName = "HELLO";
19
20         ConnectionFactory factory = new ConnectionFactory();
21
22         factory.setHost("121.40.151.120");
23         factory.setUsername("rabbitmqname");
24         factory.setPassword("rabbitmqpwd");
25
26         Connection connection = factory.newConnection();
27         Channel channel = connection.createChannel();
28
29         //与服务端一致
30         channel.queueDeclare(queueName, false, false, false, null);
31
32         System.out.println("CRTL+C");
33
34         // QueueingConsumer:用来缓存服务端推送给我们的消息。
35         QueueingConsumer consumer = new QueueingConsumer(channel);
36
37         /**
38          * 参数说明:
39          * queue:队列名称
40          * autoAck:是否自动应答,true:消息一旦被消费者消费,服务端就知道该消息已经投递,从而从队列中将消息剔除;
41          *                      false:需要在消费端显示调用channel.basicAck()方法通知服务端,如果没用显示调用,消息将进入
42          *                            unacknowledged状态,当前消费者连接断开后该消息变成ready状态重新进入队列。
43          * callback:具体消费者类
44         */
45         channel.basicConsume(queueName, true, consumer);
46
47         while (true) {
48             QueueingConsumer.Delivery delivery = consumer.nextDelivery();
49             String message = new String(delivery.getBody());
50             System.out.println("[" + message + "]");
51         }
52     }
53
54 }
时间: 10-19

RabbitMQ系列之一:HelloWorld的相关文章

初识RabbitMQ系列之一HelloWorld

Server端代码: 1 package com.helloworld; 2 3 import java.io.IOException; 4 5 import com.rabbitmq.client.Channel; 6 import com.rabbitmq.client.Connection; 7 import com.rabbitmq.client.ConnectionFactory; 8 9 public class Send { 10 /** 发送目的地队列名称 */ 11 priva

在Node.js中使用RabbitMQ系列二 任务队列

在上一篇文章在Node.js中使用RabbitMQ系列一 Hello world我有使用一个任务队列,不过当时的场景是将消息发送给一个消费者,本篇文章我将讨论有多个消费者的场景. 其实,任务队列最核心解决的问题是避免立即处理那些耗时的任务,也就是避免请求-响应的这种同步模式.取而代之的是我们通过调度算法,让这些耗时的任务之后再执行,也就是采用异步的模式.我们需要将一条消息封装成一个任务,并且将它添加到任务队列里面.后台会运行多个工作进程(worker process),通过调度算法,将队列里的任

在Node.js中使用RabbitMQ系列一 Hello world

在前一篇文章中可伸缩架构简短系列中提到过关于异步的问题.当时推荐使用RabbitMQ来做任务队列的实现方案.本篇文章以Node.js为例子,来实际操作如何和RabbitMQ进行交互. 介绍 RabbitMQ是一个消息代理.它最初的思想特别简单:接受并且转发消息.你可以将它想象为邮局:当你将邮件放到信箱中,你可以非常肯定快件员最终会将邮件交到接受人手中.你可以把RabbitMQ比喻为信箱.邮局和快递员.RabbitMQ和邮局之间主要的区别是它不处理纸张,而是接受.存储和转发二进制数据?消息. 在R

学习go语言编程系列之helloworld

1. 下载https://golang.org/dl/ # Go语言官网地址,在国内下载太慢,甚至都无法访问.通过如下地址下载:https://golangtc.com/download. 2. 安装在windows下,直接一步步点击安装即可. 3. 配置在正式开始go语言编程之前,需要进行一些基础环境变量的配置.在这里主要需要配置2个环境变量:GOROOT和GOPATH.(1)GOROOT:GO的安装路径,需要添加到环境变量中. Linux环境: vim /etc/profile export

RabbitMQ系列 第六篇:Topic类型的exchange

在上篇博文中,我们对之前的日志系统做了稍许的完善.没有使用fanout类型的exchange来广播,而是使用了direct类型的exchange来选择性的接收日志消息. 尽管使用了direct类型的exchange对日志系统有所提升,但还是有一些限制(消息不能够基于多重因素来路由). 在我们的日志系统中,希望不仅仅能够根据日志级别来订阅,还可以根据指定的routing key来订阅.你应该可以理解的,就如unix的系统日志工具,日志消息路由规则不仅仅基于日志级别(info/warn/crit…)

RabbitMQ系列 第三篇:工作队列Work Queue

在上篇中我们实现了程序来从一个已经命名的队列里发送和接收消息.本篇博文中我们将要创建工作队列用来在多个执行角色间,使用定时器来分散执行任务. 工作队列的主要思想就是避开立刻处理某个资源消耗交大的任务并且需要等待它执行完成.取而代之的是我们可以将它加入计划列表,并在后边执行这些任务.我们将任务分装成一个消息,并发送到队列中.后台的工作程序在接收到消息后将会立刻执行任务.当运行多个执行器时,任务将会在他们之间共享. 这个概念在web应用程序中是比较实用的,对于一些在一个短的http请求里无法完成的复

Springmvc系列01 Helloworld

0.springmvc请求流程图 1.使用的jia包及要写的配置文件如图 2.web.xml 配置前端控制器 <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchem

HelloWorld RabbitMQ

RabbitMQ入门-从HelloWorld开始 从读者的反馈谈RabbitMQ 昨天发完<RabbitMQ入门-初识RabbitMQ>,我陆陆续续收到一些反馈.鉴于部分读者希望结合实例来讲 期待下篇详细,最好结合案例.谢谢! 哪都好,唯一缺点就是不支持原生ha,配置起来太复杂 ... 上篇主要介绍了什么RabbitMQ,RabbitMQ能用来做什么,一些有关RabbitMQ的基本概念,同时还简单介绍了两种RabbitMQ的分发消息的模型.从这篇起,我们将改变原来的思路,针对每种模型详细讲解,

RabbitMQ学习系列(四): 几种Exchange 模式

上一篇,讲了RabbitMQ的具体用法,可以看看这篇文章:RabbitMQ学习系列(三): C# 如何使用 RabbitMQ.今天说些理论的东西,Exchange 的几种模式. AMQP协议中的核心思想就是生产者和消费者隔离,生产者从不直接将消息发送给队列.生产者通常不知道是否一个消息会被发送到队列中,只是将消息发送到一个交换机.先由Exchange来接收,然后Exchange按照特定的策略转发到Queue进行存储.同理,消费者也是如此.Exchange 就类似于一个交换机,转发各个消息分发到相

柯南君:看大数据时代下的IT架构(5)消息队列之RabbitMQ--案例(Work Queues起航)

一.回顾 让我们回顾一下,在上几章里都讲了什么?总结如下: <柯南君:看大数据时代下的IT架构(1)业界消息队列对比> <柯南君:看大数据时代下的IT架构(2)消息队列之RabbitMQ-基础概念详细介绍> <柯南君:看大数据时代下的IT架构(3)消息队列之RabbitMQ-安装.配置与监控> <柯南君:看大数据时代下的IT架构(4)消息队列之RabbitMQ--案例(Helloword起航)> 二.Work Queues(using the Java Cl