zoukankan      html  css  js  c++  java
  • (转) RabbitMQ学习之helloword(java)

    http://blog.csdn.net/zhu_tianwei/article/details/40835555

    amqp-client:http://www.rabbitmq.com/java-client.html

    1.依赖jar包

    <dependency>
    <groupId>com.rabbitmq</groupId>
    <artifactId>amqp-client</artifactId>
    <version>3.4.1</version>
    </dependency>

    2.生产者代码Send.Java

    [java] view plain copy
     
     print?
    1. package cn.slimsmart.rabbitmq.demo.helloword;  
    2.   
    3. import com.rabbitmq.client.AMQP;  
    4. import com.rabbitmq.client.Channel;  
    5. import com.rabbitmq.client.Connection;  
    6. import com.rabbitmq.client.ConnectionFactory;  
    7.   
    8. public class Send {  
    9.     //消息队列名称  
    10.     private final static String QUEUE_NAME = "helloword";    
    11.   
    12.     public static void main(String[] args) throws Exception {  
    13.           /**  
    14.          * 创建连接连接到MabbitMQ  
    15.          */    
    16.         ConnectionFactory factory = new ConnectionFactory();    
    17.         //设置MabbitMQ所在主机ip或者主机名    
    18.         factory.setHost("192.168.101.174");    
    19.         //指定用户 密码  
    20.         factory.setUsername("admin");  
    21.         factory.setPassword("admin");  
    22.         //指定端口  
    23.         factory.setPort(AMQP.PROTOCOL.PORT);  
    24.         //创建一个连接    
    25.         Connection connection = factory.newConnection();    
    26.         //创建一个频道    
    27.         Channel channel = connection.createChannel();    
    28.         //指定一个队列    
    29.         channel.queueDeclare(QUEUE_NAME, false, false, false, null);    
    30.         //发送的消息    
    31.         String message = "hello world!";    
    32.         //往队列中发出一条消息    
    33.         channel.basicPublish("", QUEUE_NAME, null, message.getBytes());    
    34.         System.out.println("Sent Message:'" + message + "'");    
    35.         //关闭频道和连接    
    36.         channel.close();    
    37.         connection.close();    
    38.     }  
    39.   
    40. }  

    3.消费者代码Receive.java

    [java] view plain copy
     
     print?
    1. package cn.slimsmart.rabbitmq.demo.helloword;  
    2.   
    3. import com.rabbitmq.client.AMQP;  
    4. import com.rabbitmq.client.Channel;  
    5. import com.rabbitmq.client.Connection;  
    6. import com.rabbitmq.client.ConnectionFactory;  
    7. import com.rabbitmq.client.QueueingConsumer;  
    8.   
    9. public class Receive {  
    10.       
    11.     //消息队列名称  
    12.     private final static String QUEUE_NAME = "helloword";    
    13.   
    14.     public static void main(String[] args) throws Exception {  
    15.          //打开连接和创建频道,与发送端一样    
    16.         ConnectionFactory factory = new ConnectionFactory();    
    17.         factory.setHost("192.168.101.174");    
    18.         //指定用户 密码  
    19.         factory.setUsername("admin");  
    20.         factory.setPassword("admin");  
    21.         //指定端口  
    22.         factory.setPort(AMQP.PROTOCOL.PORT);  
    23.         //创建一个连接    
    24.         Connection connection = factory.newConnection();    
    25.         //创建一个频道    
    26.         Channel channel = connection.createChannel();    
    27.         //声明队列,主要为了防止消息接收者先运行此程序,队列还不存在时创建队列。    
    28.         channel.queueDeclare(QUEUE_NAME, false, false, false, null);    
    29.             
    30.         //创建队列消费者    
    31.         QueueingConsumer consumer = new QueueingConsumer(channel);    
    32.         //指定消费队列    
    33.         channel.basicConsume(QUEUE_NAME, true, consumer);    
    34.         while (true)    
    35.         {    
    36.             //nextDelivery是一个阻塞方法(内部实现其实是阻塞队列的take方法)    
    37.             QueueingConsumer.Delivery delivery = consumer.nextDelivery();    
    38.             String message = new String(delivery.getBody());    
    39.             System.out.println("Received Message:'" + message + "'");    
    40.         }    
    41.     }  
    42.   
    43. }  



    如果运行出现如下异常,可能创建的用户没有访问权限。

    [java] view plain copy
     
     print?
    1. Exception in thread "main" java.io.IOException  
    2.     at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:106)  
    3.     at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:102)  
    4.     at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:124)  
    5.     at com.rabbitmq.client.impl.AMQConnection.start(AMQConnection.java:388)  
    6.     at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:516)  
    7.     at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:533)  
    8.     at cn.slimsmart.rabbitmq.demo.test.Test.main(Test.java:18)  
    9. Caused by: com.rabbitmq.client.ShutdownSignalException: connection error; reason: java.net.SocketException: Connection reset  
    10.     at com.rabbitmq.utility.ValueOrException.getValue(ValueOrException.java:67)  
    11.     at com.rabbitmq.utility.BlockingValueOrException.uninterruptibleGetValue(BlockingValueOrException.java:33)  
    12.     at com.rabbitmq.client.impl.AMQChannel$BlockingRpcContinuation.getReply(AMQChannel.java:343)  
    13.     at com.rabbitmq.client.impl.AMQChannel.privateRpc(AMQChannel.java:216)  
    14.     at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:118)  
    15.     ... 4 more  
    16. Caused by: java.net.SocketException: Connection reset  
    17.     at java.net.SocketInputStream.read(Unknown Source)  
    18.     at java.net.SocketInputStream.read(Unknown Source)  
    19.     at java.io.BufferedInputStream.fill(Unknown Source)  
    20.     at java.io.BufferedInputStream.read(Unknown Source)  
    21.     at java.io.DataInputStream.readUnsignedByte(Unknown Source)  
    22.     at com.rabbitmq.client.impl.Frame.readFrom(Frame.java:95)  
    23.     at com.rabbitmq.client.impl.SocketFrameHandler.readFrame(SocketFrameHandler.java:131)  
    24.     at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:515)  


    需要对该用户进行授权,登录web控制台后,点击"admin",进入需要授权的用户,在Admin标签页下点击新增的用户"admin",进入授权页面,默认直接点击"set permission"即可

    实例代码:http://download.csdn.net/detail/tianwei7518/8136413

  • 相关阅读:
    Creating A Simple Web Server With Golang
    go-import下划线的作用
    golang 查询数据库操作
    golang 跨平台编译——go 在windows上编译Linux平台的程序(Cross Compilation from Windows to Linux/Ubuntu)
    golang convert integer to float number
    AngularJS $q 和 $q.all 单个数据源和多个数据源合并(promise的说明)
    golang中关闭http server
    如何快速掌握plc或工控机与其他设备的modbus通讯协议?包括格式与实际过程 RT,本人从事工控行业多年,对于PLC与触摸屏也算比较熟悉,唯独对这个通讯协议比较难理解,请教高人指导,从什么地方开始下手,或者是说如何正确理解报文格式或正确写入
    网络适配器是啥
    路由器与交换机
  • 原文地址:https://www.cnblogs.com/telwanggs/p/7124555.html
Copyright © 2011-2022 走看看