rabbitmq 手动发送接收使用

前面我们都总结了一下通过RabbitListener等注解配置的rabbit的使用,那么如果需要手动进行发送和请求的话,也是可以的

一:创建一个连接工具类,用来创建连接实体

public class RabbitConnetionFactoryUtil {

    public static Connection creatConnetion()throws Exception{

//创建连接通道

            ConnectionFactory factory =new ConnectionFactory();

            factory.setHost("127.0.0.1");

            factory.setUsername("guest");

            factory.setPassword("guest");

            factory.setPort(5672);

            return factory.newConnection();

    }

}

二:我们写一个发送的方法,这里一定记得最后关闭连接

public void send()throws Exception{

//获取到连接以及mq通道

    Connection connection = RabbitConnetionFactoryUtil.creatConnetion();

    Channel channel = connection.createChannel();

//声明exchange

    channel.exchangeDeclare(EXCHANGE_NAME,"topic");

//消息内容

    String message ="插入商品,id=100";

//发布消息

    channel.basicPublish(EXCHANGE_NAME,"item.insert",null,message.getBytes());

    System.out.println(" [x] Sent '"+message +"'");

    channel.close();

    connection.close();

}

三:我们手动来接收消息

public void rec()throws Exception{

        //获得连接和mq通道

        Connection connection = RabbitConnetionFactoryUtil.creatConnetion();

        Channel channel = connection.createChannel();

        //声明通道

        channel.queueDeclare(QUEUE_NAME,false,false,false,null);

        //绑定exchange

        channel.queueBind(QUEUE_NAME,EXCHANGE_NAME,"item.#");//使用item.# 匹配所有的以item开头的

        //同一时刻服务器只能发送一条消息给消费者;

        channel.basicQos(1);

        //声明消费者,直接在下面的监控中做

        GetResponse response = channel.basicGet(QUEUE_NAME,false);

        if (response ==null) {

            System.out.println("该队列暂时没有消息收到");

        // No message retrieved.

        }else {

            AMQP.BasicProperties props = response.getProps();

            byte[] body = response.getBody();

            String message =new String(body,"UTF-8");

            System.out.println("搜索系统 '" + message +"'");

            long deliveryTag = response.getEnvelope().getDeliveryTag();

            channel.basicAck(deliveryTag,false);// acknowledge receipt of the message

    }

}

这样,我们就可以在我们需要获取消息的时候,手动获取消息了。

你可能感兴趣的:(rabbitmq 手动发送接收使用)