环境配置
- 安装erlang;https://www.erlang.org/downloads Windows环境的话可以直接下载exe文件到本地,直接右键以管理员身份运行,安装完成后需要配置环境变量
- 安装rabbitMQ;http://www.rabbitmq.com/ Windows环境的话可以直接下载exe文件到本地,直接右键以管理员身份运行
- 安装RabbitMQ的图形管理界面插件;在rabbitmq的安装目录下找到sbin目录,进入并在此目录打开cmd窗口执行rabbitmq-plugins
enable rabbitmq_management - 创建管理用户;
- 创建虚拟主机Virtual Hosts
注意点:rabbitMQ服务器和erlang必须兼容对应,兼容性rabbitMQ里有;windows环境最好以管理员身份运行;
项目引用jar包
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.6.0</version>
</dependency>
生产者代码eg:
public class Producer {
static final String QUEUE_NAME="simple_queue";
public static void main(String[] args) throws Exception{
ConnectionFactory connectionFactory = new ConnectionFactory();
connectionFactory.setHost("localhost");
connectionFactory.setPort(5672);
connectionFactory.setVirtualHost("/itcast");
connectionFactory.setUsername("admin");
connectionFactory.setPassword("password");
Connection connection = connectionFactory.newConnection();
Channel channel = connection.createChannel();
channel.queueDeclare(QUEUE_NAME, true, false, false, null);
String message="你好!这是第一个简单构建消息!";
channel.basicPublish("",QUEUE_NAME,null,message.getBytes());
System.out.println("已发出消息:"+message);
channel.close();
connection.close();
}
}
消费者代码eg:
public class Customer {
static final String QUEUE_NAME="simple_queue";
public static void main(String[] args) throws Exception{
ConnectionFactory connectionFactory = new ConnectionFactory();
connectionFactory.setHost("localhost");
connectionFactory.setPort(5672);
connectionFactory.setVirtualHost("/itcast");
connectionFactory.setUsername("admin");
connectionFactory.setPassword("password");
Connection connection = connectionFactory.newConnection();
Channel channel = connection.createChannel();
channel.queueDeclare(QUEUE_NAME, true, false, false, null);
DefaultConsumer defaultConsumer = new DefaultConsumer(channel){
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
System.out.println("路由key:"+envelope.getRoutingKey());
System.out.println("交换机:"+envelope.getExchange());
System.out.println("消息id:"+envelope.getDeliveryTag());
System.out.println("接收到的消息:"+new String(body, "UTF-8"));
}
};
channel.basicConsume(QUEUE_NAME,true,defaultConsumer);
}
}