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(); } } }
疯狂的妞妞 :每一天,做什么都好,不要什么都不做!