RabbitMQ是一个消息代理:

它接受和转发消息。您可以将其视为邮局:当您将要发布的邮件放在邮箱中时,您可以确定邮件先生或Mailperson女士最终会将邮件发送给您的收件人。在这个比喻中,RabbitMQ是邮箱,邮局和邮递员。

RabbitMQ和邮局之间的主要区别在于它不处理纸张,而是接受,存储和转发二进制blob数据 - 消息。

生产者:发送消息的程序 ----Procedure 

队列:rabbitMq中的邮箱的名称-----queue

消费者:接收消息-------consumer

生产者,消费者和代理不必驻留在同一主机上; 实际上在大多数应用中他们没有。

通常使用rabbitmq是为了解耦,为了不要A程序直接调用B程序并且A程序不依赖于B的响应(调用B时,如果失败不会影响A的流程)

与是加入urabbitMQ.

比如:用户注册成功后给他发一条成功注册短信,其中A程序就相当于注册,B程序相当于发短信,A程序注册不会因为B程序注册成功短信没法或者失败而失败。

所以此时引入rabbitMq来解决此事。A程序王mq上发一条信息然后告诉用户注册完成,而后mq会把这条信息发送给B程序,B程序继续发送注册成功短信

特别说明:以后的文章都是基于java来实现的

简单的点对点模式

首先建两个java类,一个为Provider(生产消息),一个为Consumer(消费消息),一个为rabbitMQ连接类

在下图中,“P”是我们的生产者,“C”是我们的消费者。中间的框是一个队列 - RabbitMQ代表消费者保留的消息缓冲区。

直接上代码:

首先得maven中引入

<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>3.4.1</version>
</dependency>
/**
* rabbitMq连接
*
* @author lawt
* @date 2018-07-30 9:31
**/
public class ConnectionRabbitUtil {
/**
* 获取rabbitMQ的连接
*/
public static Connection getConnection() throws Exception {
//定义连接工厂
ConnectionFactory factory = new ConnectionFactory();
//设置服务地址
factory.setHost("127.0.0.1");
//端口
factory.setPort(5672);
//用户名、密码(这里我们使用的是guest用户,在真正的开发使用过程中建议add user)
factory.setUsername("guest");
factory.setPassword("guest");
// 通过工程获取连接
return factory.newConnection();
}
}
/**
* 生产消息
* @author lawt
* @date 2018-07-30 9:37
**/
public class Provider {
private static final String QUEUE_NAME = "my_queue";
public static void main(String[] args) throws Exception {
// 获取到连接以及mq通道
Connection connection = ConnectionRabbitUtil.getConnection();
// 从连接中创建通道
Channel channel = connection.createChannel();
// 声明(创建)队列
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
// 消息内容
String message = "Hello World!";
channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
System.out.println(" 消费生产消息= '" + message + "'");
//关闭通道和连接
channel.close();
connection.close();
}
}
 
/**
* 消费消息
* @author lawt
* @date 2018-07-30 9:37
**/
public class Consumer {
private static final String QUEUE_NAME = "my_queue";
public static void main(String[] args) throws Exception {
Connection connection = ConnectionRabbitUtil.getConnection();
//创建通道
Channel channel = connection.createChannel();
//申明队列
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
QueueingConsumer consumer=new QueueingConsumer(channel);
//监听队列QUEUE_NAME,autoAck=true
channel.basicConsume(QUEUE_NAME, true, consumer);
while (true){
QueueingConsumer.Delivery delivery = consumer.nextDelivery();
String message = new String(delivery.getBody());
System.out.println(" 消费端接收到消息= '" + message + "'");
}
}
}

这样一个很简单的java+rabbitmq就用起来了。