请稍等 ...
×

采纳答案成功!

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

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

插入代码

4回答

杰克不接客 2019-05-19 18:11:19
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
老师的方案已经有点过时了,这个课程的讨论去很不活跃,老师回复的也很不及时。我也遇到同样的问题,最新的解决方案如下,希望能给其他兄弟提供帮助:
 
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, falsefalsefalsenull);
 
            // 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下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号