• (转) 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

  • 相关阅读:
    Java将对象保存到文件中/从文件中读取对象
    Python爬虫框架--Scrapy安装以及简单实用
    Python--网络爬虫模块requests模块之响应--response
    用Pycharm创建指定的Django版本
    python网络爬虫之requests模块
    Python---异常处理
    Python函数的装饰器修复技术(@wraps)
    Django Rest framework
    Vue的基础使用
    Vue
  • 原文地址:https://www.cnblogs.com/telwanggs/p/7124555.html
Copyright © 2020-2023  润新知