RabbitMQ学习(一)之helloword(java)

来源:互联网 发布:吉诺比利职业生涯数据 编辑:程序博客网 时间:2024/05/16 06:31

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?在CODE上查看代码片派生到我的代码片
  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, falsefalsefalsenull);    
  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?在CODE上查看代码片派生到我的代码片
  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, falsefalsefalsenull);    
  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?在CODE上查看代码片派生到我的代码片
  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"即可
0 0
原创粉丝点击