这里官方使用的Pom是4.0.2版本

 <dependencies>
  <dependency>
    <groupId>com.rabbitmq</groupId>
    <artifactId>amqp-client</artifactId>
    <version>4.0.2</version>
  </dependency>
   <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.10</version>
  </dependency>
  <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.5</version>
  </dependency>
  <dependency>
18     <groupId>log4j</groupId>
19     <artifactId>log4j</artifactId>
    <version>1.2.17</version>
21   </dependency>
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
26   </dependency>
</dependencies>

简单队列 hello word

P:消息的生产者

C:消息的消费者

红色:队列

生产者将消息发送到队列,消费者从队列中获取消息。

那么我们根据以上的模型,咱们抽取出 3 个对象 生产者(用户发送消息) 队列(中间件):类似于容器(存储消息) 消费者(获取队列中的消息)

JAVA 操作 获取 MQ 连接

类似于我们在操作数据库的时候的要获取到连接然后才对数据进行

 package cn.wh.util;

 import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory; import java.io.IOException;
import java.util.concurrent.TimeoutException; public class RabbitMqConnectionUtil {
/**
* 获取mq的连接
* @return
*/
public static Connection getConnection() throws IOException, TimeoutException {
//定义一个连接工厂
ConnectionFactory factory=new ConnectionFactory();
//设置服务器的地址
factory.setHost("192.168.152.5");
//AMQP 5672
factory.setPort(5672);
//设置哪一个数据库 vhost
factory.setVirtualHost("/vhost_wh");
//设置用户名
factory.setUsername("wh");
factory.setPassword("123"); return factory.newConnection();
}
}

生产者发送数据到消息队列

 package cn.wh.simple;

 import cn.wh.util.RabbitMqConnectionUtil;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection; import java.io.IOException;
import java.util.concurrent.TimeoutException; public class Send {
private static final String QUEVE_NAME = "test_simple_queue"; public static void main(String[] args) throws IOException {
//获取一个连接
Connection connection = null;
try { connection = RabbitMqConnectionUtil.getConnection();
} catch (IOException e) {
e.printStackTrace();
} catch (TimeoutException e) {
e.printStackTrace();
} //创建一个通道
Channel channel = connection.createChannel();
// 创建队列声明
channel.queueDeclare(QUEVE_NAME, false, false, false, null); //发送的消息
String msg="hello simple";
channel.basicPublish("",QUEVE_NAME,null,msg.getBytes());
System.out.println("发送成功===============");
try {
channel.close();
connection.close();
} catch (TimeoutException e) {
e.printStackTrace();
}
}
}

查看消消费者消费消费者消费消费者消费消费者消消费者消费消费者消费

 package cn.wh.simple;

 import cn.wh.util.RabbitMqConnectionUtil;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.QueueingConsumer; import java.io.IOException;
import java.util.concurrent.TimeoutException; public class Accept {
private static final java.lang.String QUEVE_NAME = "test_simple_queue";
public static void main(String[] args) throws IOException, InterruptedException { //获取一个连接
Connection connection=null;
{
try {
connection = RabbitMqConnectionUtil.getConnection();
} catch (IOException e) {
e.printStackTrace();
} catch (TimeoutException e) {
e.printStackTrace();
}
//定义管道
Channel channel = connection.createChannel();
//定义队列的消费者
QueueingConsumer queueingConsumer = new QueueingConsumer(channel);
channel.basicConsume(QUEVE_NAME,true,queueingConsumer);
while (true){
QueueingConsumer.Delivery delivery = queueingConsumer.nextDelivery();
String msg = new String(delivery.getBody()); System.out.println("msg"+ msg);
}
}
}
}

简单队列的不足

耦合性高 生产消费一一对应(如果有多个消费者想都消费这个消息,就不行了) 队列名称变更时需要同时更改

RabbitMQ初体验的更多相关文章

  1. Python操作RabbitMQ初体验(一)

    由于想用Python实现一套分布式系统,来管理和监控CDN的内容与运行状态,误打误撞认识了RabbitMQ,推荐的人很多,如余锋<我为什么要选择RabbitMQ>等等. 在MQ这个词汇映入 ...

  2. RabbitMQ 初体验

    概述 RabbitMQ是一款消息队列中间件.他提供了几乎覆盖所有语言的SDK与文档,简直强大的不的了.要详细的去了解学习RabbitMQ,我建议还是看官方文档吧.http://www.rabbitmq ...

  3. JMS服务器ActiveMQ的初体验并持久化消息到MySQL数据库中

    JMS服务器ActiveMQ的初体验并持久化消息到MySQL数据库中 一.JMS的理解JMS(Java Message Service)是jcp组织02-03年定义了jsr914规范(http://j ...

  4. Spring boot集成Rabbit MQ使用初体验

    Spring boot集成Rabbit MQ使用初体验 1.rabbit mq基本特性 首先介绍一下rabbitMQ的几个特性 Asynchronous Messaging Supports mult ...

  5. .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验

    不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...

  6. Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验

    Mac OS 虚拟机安装方法 最近把自己的电脑升级了一下SSD固态硬盘,总算是有容量安装Mac 虚拟机了!经过心碎的安装探索,尝试了国内外的各种安装方法,最后在youtube上找到了一个好方法. 简单 ...

  7. Spring之初体验

                                     Spring之初体验 Spring是一个轻量级的Java Web开发框架,以IoC(Inverse of Control 控制反转)和 ...

  8. Xamarin.iOS开发初体验

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKwAAAA+CAIAAAA5/WfHAAAJrklEQVR4nO2c/VdTRxrH+wfdU84pW0

  9. 【腾讯Bugly干货分享】基于 Webpack & Vue & Vue-Router 的 SPA 初体验

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57d13a57132ff21c38110186 导语 最近这几年的前端圈子,由于 ...

随机推荐

  1. maven2报xxxServlet cannot be cast to javax.servlet

    由于CacheFilter实现了javax.servlet.Filter接口,Filter是在servlet-api.jar里,因此pom中有  <dependency>          ...

  2. 使用ShardingJdbc分表

    项目中做个统一订单的基础服务(只记录订单的基本的公共信息),1.便与后续各种其他业务的接入~ 2.同时APP端提供统一订单信息的查询入口,后续其他业务不用升级 由于统一的订单服务,所以订单量会很大,所 ...

  3. vs2008 怎么在Release下调试代码

    vs2008 怎么在Release下调试代码 (适用VS2005/VS2008) 在当前工程点击右键选择properties,选择 All Configurations C++>General- ...

  4. python之MySQL学习——简单的增删改查封装

    1.增删改查封装类MysqlHelper.py import pymysql as ps class MysqlHelper: def __init__(self, host, user, passw ...

  5. JS让DIV绑定某个事件

    <html> <head> <title>Add/Remove Event Handlers Example</title> <script ty ...

  6. flannel相关资料链接

    1.DockOne技术分享(十八):一篇文章带你了解Flannel http://dockone.io/article/618 2.理解Kubernetes网络之flannel网络http://ton ...

  7. 访问hdfs里的文件

    准备工作: 给hdfs里上传一份用于测试的文件 [root@master ~]# cat hello.txt hello 1 hello 2 hello 3 hello 4 [root@master ...

  8. day6 字典的增减查删

    字典的使用 一.字典的特性 字典是无序的,数据关联性强,键值对,唯一一个映射的数据类型 字典的键必须是可哈希的(不可变的数据类型:字符串,数字,布尔值,元祖),并且是唯一的 不可哈希的(可变的数据类型 ...

  9. ASP.NET4 与 VS2010 Web 开发页面服务改进

    转:http://blog.163.com/kele_lipeng/blog/static/81345278201132754729336/ 作者:朱先忠 本文将接着上一篇 ASP.NET4与VS20 ...

  10. case的嵌套使用

    case分支语句的格式如下: case $变量名 in 模式1) 命令序列1 ;; 模式2) 命令序列2 ;; *) 默认执行的命令序列     ;; esac case语句结构特点如下: 1.    ...