rabbitmq入门
1.生产者(服务提供方)
//依赖
<dependencies>
<!-- rabbitmq客户端依赖-->
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.8.0</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
</dependencies>
<!-- 指定jdk版本-->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>
使用步骤
1.创建连接队列名称
public static final String QUEUE_NAME="hello";
2.创建连接工厂
//ip和账号密码以自己电脑为准
public static void main(String[] args) throws IOException, TimeoutException {
//创建连接工厂
ConnectionFactory factory=new ConnectionFactory();
//工厂ip连接rabbitmq的队列
factory.setHost("192.168.187.132");
factory.setUsername("admin");
factory.setPassword("admin");
3.创建连接
//连接后不是直接使用,而是通过信道
Connection connection = factory.newConnection();
Channel channel=connection.createChannel();
4.设置信道参数
/**
* 生成一个队列,下面使用到的参数
* 1.队列名称
* 2.队列里面的消息是否持久化,默认false存在内存,true持久化,存在磁盘
* 3.队列消息是否共享,true表示可共享,false表示只能一个人使用
* 4.最后一个消费者断开连接以后,是否自动删除,true表示自动删除
* 5.其他参数
*/
channel.queueDeclare(QUEUE_NAME,false,false,false,null);
String message="hello rabbitmq";
5.发送信息
/**
* 发送一个消费
* 1.发送到哪一台交换机
* 2.路由的key,本次是队列的名称
* 3.其他参数消息
* 4.发送消息的消息体
*/
channel.basicPublish("",QUEUE_NAME,null,message.getBytes());
System.out.println("消息发送成功");
2.消费者
使用步骤
1.定义队列名称
//必须和生产者的队列名称一样,才能接收到消息
public static final String QUEUE_NAME="hello";
2.创建工厂
public static void main(String[] args) throws IOException, TimeoutException {
ConnectionFactory factory=new ConnectionFactory();
factory.setHost("192.168.187.132");
factory.setUsername("admin");
factory.setPassword("admin");
3.建立连接
Connection connection= factory.newConnection();
Channel channel=connection.createChannel();
4.申明接收消息
DeliverCallback deliverCallback=(consumerTag,message)->
{
System.out.println(new String(message.getBody()));
};
CancelCallback cancelCallback=consumerTag->
{
System.out.println("消息被中断");
};
5.接收消息
/**
* 消费者消费消息
* 1.消费哪个队列
* 2.消费成功后,是否需要自动应答,true表示自动应答
* 3.消费未成功的回调
* 4.消费者取消消费的回调
*/
channel.basicConsume(QUEUE_NAME,true,deliverCallback,cancelCallback);
注意:在使用mq的时候,需要将端口打开,并且登陆的账号需要获取权限
获取权限