定义:

消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过写和检索出入列队的针对应用程序的数据(消息)来通信,而无需专用连接来链接它们。简单理解:蓝牙配对

jar包依赖:

<!-- 加入mq消息依赖包 -->
  <dependency>
         <groupId>com.rabbitmq</groupId>
         <artifactId>amqp-client</artifactId>
         <version>3.0.4</version>
  </dependency>

方式一:

(发)

  1. import java.io.IOException;
  2. import com.rabbitmq.client.Channel;
  3. import com.rabbitmq.client.Connection;
  4. import com.rabbitmq.client.ConnectionFactory;
  5.  
  6. public class Send {
  7. private final static String QUEUE_NAME = "qq";
  8.  
  9. public static void main(String[] args) throws IOException {
  10. ConnectionFactory factory = new ConnectionFactory();
  11. factory.setHost("hostname");
  12. factory.setUsername("username");
  13. factory.setPassword("password");
  14. factory.setPort(5672);
  15. Connection connection = factory.newConnection();
  16. Channel channel = connection.createChannel();
  17.  
  18. channel.queueDeclare(QUEUE_NAME, false, false, false, null);
  19. String message = "Hello World!";
  20. channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
  21. System.out.println(" [x] Sent '" + message + "'");
  22.  
  23. channel.close();
  24. connection.close();
  25. }
  26. }

(收)

  1. import com.rabbitmq.client.ConnectionFactory;
  2. import com.rabbitmq.client.QueueingConsumer;
  3. import com.rabbitmq.client.Channel;
  4. import com.rabbitmq.client.Connection;
  5.  
  6. public class Reqv {
  7. private final static String QUEUE_NAME = "qq";
  8.  
  9. public static void main(String[] argv) throws Exception {
  10. ConnectionFactory factory = new ConnectionFactory();
  11.  
  12. factory.setUsername("username");
  13. factory.setPassword("password");
  14. factory.setHost("hostname");
  15. factory.setVirtualHost("/");
  16. factory.setPort(5672);
  17. Connection connection = factory.newConnection();
  18. Channel channel = connection.createChannel();
  19. channel.queueDeclare(QUEUE_NAME, false, false, false, null);
  20.  
  21. System.out.println(" [*] Waiting for messages. To exit press CTRL+C");
  22. QueueingConsumer consumer = new QueueingConsumer(channel);
  23. channel.basicConsume(QUEUE_NAME, true, consumer);
  24. while(true){
  25. QueueingConsumer.Delivery delivery = consumer.nextDelivery();
  26. String message = new String(delivery.getBody());
  27. System.out.println(" [x] Received '" + message + "'");
  28. }
  29. }
  30. }

方式二:

(发)

  1. import com.rabbitmq.client.Channel;
  2. import com.rabbitmq.client.Connection;
  3. import com.rabbitmq.client.ConnectionFactory;
  4.  
  5. public class Send2 {
  6.  
  7. private static final String EXCHANGE_NAME = "qq" ;
  8.  
  9. public static void main (String [] argv) throws java.io.IOException {
  10.  
  11. ConnectionFactory factory = new ConnectionFactory();
  12. factory.setHost("hostname");
  13. factory.setUsername("username");
  14. factory.setPassword("password");
  15. factory.setPort(5672);
  16. Connection connection = factory.newConnection();
  17. Channel channel = connection.createChannel();
  18.  
  19. channel.exchangeDeclare(EXCHANGE_NAME,"fanout",true);
  20.  
  21. String message = "hello world";
  22.  
  23. channel.basicPublish(EXCHANGE_NAME,"",null,message.getBytes());
  24. System.out.println("[x] Sent'" + message + "'");
  25.  
  26. channel.close();
  27. connection.close();
  28. }

(收)

  1. import java.io.IOException;import com.alibaba.fastjson.JSONObject;
  2. import com.rabbitmq.client.AMQP;
  3. import com.rabbitmq.client.Channel;
  4. import com.rabbitmq.client.Connection;
  5. import com.rabbitmq.client.ConnectionFactory;
  6. import com.rabbitmq.client.Consumer;
  7. import com.rabbitmq.client.DefaultConsumer;
  8. import com.rabbitmq.client.Envelope;
  9.  
  10. public class Reqv2 {
  11. private static final String EXCHANGE_NAME = "qq" ;public static void main (String [] argv) throws Exception {
  12. ConnectionFactory factory = new ConnectionFactory();
  13. factory.setHost("hostname");
  14.  
  15. factory.setUsername("username");
  16. factory.setPassword("password");
  17. factory.setPort(5672);
  18.  
  19. Connection connection = factory.newConnection();
  20. Channel channel = connection.createChannel();
  21.  
  22. channel.exchangeDeclare(EXCHANGE_NAME,"fanout",true);
  23. String queueName = channel.queueDeclare().getQueue();
  24. channel.queueBind(queueName,EXCHANGE_NAME,"");
  25.  
  26. System.out.println("[*]等待消息。退出按CTRL + C");
  27.  
  28. Consumer consumer = new DefaultConsumer(channel){
  29. @Override
  30. public void handleDelivery (String consumerTag,Envelope envelope,AMQP.BasicProperties properties,byte[] body) throws IOException {
  31. String message = new String(body,"UTF-8");
  32. System.out.println("[x] Received'" + message + "'");
  33.  
  34. }
  35. };
  36. channel.basicConsume(queueName,true,consumer);
  37. }
  38. }

参考网址:

http://www.rabbitmq.com/tutorials/tutorial-one-java.html

java实现MQ消息收发两种方式的更多相关文章

  1. Java中HashMap遍历的两种方式

    Java中HashMap遍历的两种方式 转]Java中HashMap遍历的两种方式原文地址: http://www.javaweb.cc/language/java/032291.shtml 第一种: ...

  2. java中数组复制的两种方式

    在java中数组复制有两种方式: 一:System.arraycopy(原数组,开始copy的下标,存放copy内容的数组,开始存放的下标,需要copy的长度); 这个方法需要先创建一个空的存放cop ...

  3. java动态获取WebService的两种方式(复杂参数类型)

    java动态获取WebService的两种方式(复杂参数类型) 第一种: @Override public OrderSearchListRes searchOrderList(Order_Fligh ...

  4. Java执行groovy脚本的两种方式

    记录Java执行groovy脚本的两种方式,简单粗暴: 一种是通过脚本引擎ScriptEngine提供的eval(String)方法执行脚本内容:一种是执行groovy脚本: 二者都通过Invocab ...

  5. java中设置代理的两种方式

    1 前言 有时候我们的程序中要提供可以使用代理访问网络,代理的方式包括http.https.ftp.socks代理.比如在IE浏览器设置代理. 那我们在我们的java程序中使用代理呢,有如下两种方式. ...

  6. java中实现同步的两种方式:syschronized和lock的区别和联系

    Lock是java.util.concurrent.locks包下的接口,Lock 实现提供了比使用synchronized 方法和语句可获得的更广泛的锁定操作,它能以更优雅的方式处理线程同步问题,我 ...

  7. Java值创建线程的两种方式对比

    在Java中创建线程的方式有两种,第一种是直接继承Thead类,另一种是实现Runable接口.那么这两种方式孰优孰劣呢? 采用继承Thead类实现多线程: 优势:编写简单,如果需要访问当前线程,只需 ...

  8. java 多线程之卖票两种方式

    1.通过extends Thread /* 需求:简单的卖票,多个窗口同时买票 (共用资源) 创建线程的第二种方式:实现Runnable接口 步骤: 1,定义类实现Runnable接口 2,覆盖/重写 ...

  9. Java中实现多线程的两种方式之间的区别

    Java提供了线程类Thread来创建多线程的程序.其实,创建线程与创建普通的类的对象的操作是一样的,而线程就是Thread类或其子类的实例对象.每个Thread对象描述了一个单独的线程.要产生一个线 ...

随机推荐

  1. Android Html处理器通用类 HtmlUtil

    1.整体分析 1.1.首先看一下源代码,可以直接Copy. public class HtmlUtil { /** * 获取 html 中的纯文本 */ public static String Ht ...

  2. node-sass安装不成功的问题

    SASS_BINARY_SITE=https://npm.taobao.org/mirrors/node-sass/ npm install node-sass 简单粗暴的执行上述的命令.

  3. 斐波那契数列(递归)&求100以内的素数

    Java 5 添加了 java.util.Scanner 类,这是一个用于扫描输入文本的新的实用程序.它是以 前的 StringTokenizer 和 Matcher 类之间的某种结合.由于任何数据都 ...

  4. 剑指Offer - 九度1386 - 旋转数组的最小数字

    剑指Offer - 九度1386 - 旋转数组的最小数字2013-11-24 01:57 题目描述: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转 ...

  5. 剑指Offer - 九度1214 - 丑数

    剑指Offer - 九度1214 - 丑数2013-11-21 21:06 题目描述: 把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7. ...

  6. 《Cracking the Coding Interview》——第16章:线程与锁——题目4

    2014-04-27 20:06 题目:设计一个类,只有在不产生死锁的时候才分配资源. 解法:不太清楚这个题是要分配何种资源,以何种形式?所以没能动手写个可运行的代码,只是闲扯了几句理论分析. 代码: ...

  7. PHP字符串word末字符大小写互换

    要求 给出一个字符串如 “A journey of, a thousand 'miles' must can't \"begin\" with a single step.” ,通 ...

  8. leetcode 【 Intersection of Two Linked Lists 】python 实现

    题目: Write a program to find the node at which the intersection of two singly linked lists begins. Fo ...

  9. python判断mongodb--find(),find_one()返回是否为空

    conn = MongoClient('127.0.0.1', 27017)db = conn.diffcollection = db['test1']result = collection.find ...

  10. python2.7写入文件时指定编码为utf-8

    python3.0可以这样写 f = open('ufile.log', 'w', 'utf-8')   但在python2.7中open()没有编码参数,如上那样写会报错,可以使用如下模块 impo ...