RabbitMQ——helloworld

定个小目标,写一个能跑起来的程序。

添加maven依赖

<!-- https://mvnrepository.com/artifact/com.rabbitmq/amqp-client -->
<dependency>
    <groupId>com.rabbitmq</groupId>
    <artifactId>amqp-client</artifactId>
    <version>5.8.0</version>
</dependency>

 通过下列函数,获取消息队列的连接

public class ConnectionUtil {
    private static Logger logger = LoggerFactory.getLogger(ConnectionUtil.class);

    public static Connection getConnection() {
        try {
            Connection connection = null;
            ConnectionFactory factory = new ConnectionFactory();
            //设置服务端地址(域名地址/ip)
            factory.setHost("127.0.0.1");
            //设置服务器端口号,最易犯的错误就是填写为15672(网页端口),正确为5672
            factory.setPort(5672);
            //设置虚拟主机(相当于数据库中的库)
            factory.setVirtualHost("/");
            //设置用户名
            factory.setUsername("root");
            //设置密码
            factory.setPassword("root");
            connection = factory.newConnection();
            return connection;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    public static void main(String[] args) {
        getConnection();
    }
}

 消息发送方

import com.rabbitmq.client.*;

import java.io.IOException;
import java.nio.charset.Charset;
import java.util.concurrent.TimeoutException;

/**
 * @author Mr.css
 * @date 2020-11-12 19:30
 */
public class Send {
    /**
     * 队列名称
     */
    private static final String QUEUE_NAME = "queue_name";
    /**
     * 路由键,交换机会根据路由键,把消息推到队列,
     * 如果路由键与队列名称一致的情况,消息会被精准推送到同名的队列
     * (可以一次性推给多个队列)
     */
    private static final String ROUTING_KEY = "queue_name";
    /**
     * 交换机名称
     */
    private static final String EXCHANGE = "exchanges";

    public static void main(String[] args) {
        try {
            Connection connection = ConnectionUtil.getConnection();
            Channel channel = connection.createChannel();
            //声明一个队列
            channel.queueDeclare(QUEUE_NAME, false, false, false, null);

            int cnt = 10;
            while (cnt-- > 0) {
                String message = "This is simple queue:" + cnt;
                //通过交换机,把消息发送到推送到队列中
                channel.basicPublish(EXCHANGE, ROUTING_KEY, null, message.getBytes(Charset.defaultCharset()));
                System.out.println("[send]:" + message);
            }

            channel.close();
            connection.close();
        } catch (IOException | TimeoutException e) {
            e.printStackTrace();
        }
    }
}

 

 消息消费者

/**
 * @author Mr.css
 * @date 2020-11-12 19:31
 */
public class Receive {
    private static final String QUEUE_NAME = "queue_name";

    public static void main(String[] args) {
        try {
            Connection connection = ConnectionUtil.getConnection();
            Channel channel = connection.createChannel();
            channel.queueDeclare(QUEUE_NAME, false, false, false, null);

            DefaultConsumer consumer = new DefaultConsumer(channel) {

                @Override
                public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties,
                                           byte[] body) {
                    String message = new String(body, StandardCharsets.UTF_8);
                    System.out.println("[Receive]:" + message);

                    try {
                        Thread.sleep(500);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            };
            channel.basicConsume(QUEUE_NAME, true, consumer);
        } catch (IOException | ShutdownSignalException | ConsumerCancelledException e) {
            e.printStackTrace();
        }
    }
}

 

posted on 2022-03-25 17:08  疯狂的妞妞  阅读(15)  评论(0编辑  收藏  举报

导航