请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

正在回答 回答被采纳积分+3

4回答

杰克不接客 2019-05-19 18:11:19
老师的方案已经有点过时了,这个课程的讨论去很不活跃,老师回复的也很不及时。我也遇到同样的问题,最新的解决方案如下,希望能给其他兄弟提供帮助:

package com.rabbitmq.demo.quickstart;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Consumer;
import com.rabbitmq.client.DefaultConsumer;
import com.rabbitmq.client.Envelope;

public class MsgConsumer {

	private final static String QUEUE_NAME = "test001";

	public static void main(String[] args) throws IOException, TimeoutException {

		// step01: create a new connection factory and configure the connection
		ConnectionFactory connectionFactory = new ConnectionFactory();
		connectionFactory.setHost("127.0.0.1");
		connectionFactory.setUsername("guest");
		connectionFactory.setPassword("guest");
		connectionFactory.setPort(5672);
		connectionFactory.setVirtualHost("/");
		Connection connection = null;
		Channel channel = null;
		try {
			// Step02: Create connection with connection factory
			connection = connectionFactory.newConnection();

			// Step03: create a channel with connection
			channel = connection.createChannel();

			// Step04: declare(create) one queue, the queue we are listening to
			channel.queueDeclare(QUEUE_NAME, false, false, false, null);

			// Step05: Create a consumer - where there is a message arrived,
			// the handleDelivery method will be called
			System.out.println("We consumer are waiting your messages");
			Consumer consumer = new DefaultConsumer(channel){
				@Override
				public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties,
						byte[] body) throws IOException {
					String message = new String(body, "UTF-8");
					System.out.println("Customer Received '" + message + "'");
				}
			};
			
			// Step06: let the consumer consume the queue
			channel.basicConsume(QUEUE_NAME, true, consumer);
			
		} catch (Exception e) {
			System.out.println("Opps, there is something wrong!");
			e.printStackTrace();
		} finally {
			System.out.println("Connection was closed!");
//			channel.close();
//			connection.close();
		}
	}
}


2 回复 有任何疑惑可以回复我~
幕布斯2529510 2019-03-17 16:00:03

QueueingConsummer 在4.X版本的时候被Deprecated,你可以查看下你pom文件引入的版本在3.x版本里client包里是有QueueingConsummer.cless这个类的,但是4.x版本里就没有这个类了。我看了篇博文上面说QueueingConsumer容易造成内存溢出,所以在4.x版本以后就推荐使用DefaultConsumer。

0 回复 有任何疑惑可以回复我~
  • DefaultConsumer如何获得delivery?如何读取消息呢?
    回复 有任何疑惑可以回复我~ 2019-05-19 16:23:02
阿神 2018-10-11 11:21:29

看一下引入的jar是否和我一致,版本

0 回复 有任何疑惑可以回复我~
  • 提问者 昊南同学 #1
    是pom文件吗?里面的dependency什么的,版本号都一样呀
    回复 有任何疑惑可以回复我~ 2018-10-11 11:29:31
  • 阿神 #2
    看看jar包是否一样,jar包,rabbitmq的版本
    回复 有任何疑惑可以回复我~ 2018-10-11 11:30:12
  • 提问者 昊南同学 回复 阿神 #3
    阿神老师,我看不到你的jar包是啥版本啊,我是跟着课程一路敲的,里面就再pom文件引入了一下,可是我这pom文件引入的版本都是跟你一样的呀
    回复 有任何疑惑可以回复我~ 2018-10-11 11:45:42
阿神 2018-10-11 11:21:04

应该是jar没引进来

0 回复 有任何疑惑可以回复我~
  • 阿神兄,可以写一个新一点的demo把代码分享一下吗?虽然把版本改成跟你的一致可以临时解决问题,但是技术是一致在往前走的呢,我的项目上是用新版的呢。
    回复 有任何疑惑可以回复我~ 2019-05-19 16:21:18
  • DefaultConsumer 没有nextDelivery
    回复 有任何疑惑可以回复我~ 2019-05-19 16:22:13
  • 后面会更新一些知识点旧的内容,有些确实是原生API,一般使用直接springamqp,很少用原生的
    回复 有任何疑惑可以回复我~ 2019-05-19 22:18:26
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信