java编写rabbitmq的实现

1.创建一个项目

2.pom.xml

<dependency>
        	<groupId>com.rabbitmq</groupId>
        	<artifactId>amqp-client</artifactId>
        	<version>3.0.4</version>
        </dependency>

 3.spring.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:context="http://www.springframework.org/schema/context"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
      http://www.springframework.org/schema/context
      http://www.springframework.org/schema/context/spring-context.xsd"
      >
      
      <!-- 扫描文件(自动将servicec层注入) -->
    <context:component-scan base-package="com.guilf.project.service"/>
 </beans>

 4.RabbitMQUtil.java

/**
 * 
 */
/**
 * @author DELL
 *
 */
package com.guilf.project.rabbitMQ.util;

import java.io.IOException;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.QueueingConsumer;

public class RabbitMQUtil
{
	private final static String QUEUE_NAME = "guilfRabbitMQ";

	public static Connection getConnection()
	{
		ConnectionFactory factory = new ConnectionFactory();
		factory.setHost("192.168.88.134");//MQ的ip地址
		factory.setPort(5672);//mq的接口
		factory.setUsername("admin");//mq用户名
		factory.setPassword("admin");//mq密码
		Connection connection;
		try 
		{
			connection = factory.newConnection();// 建立连接
			return connection;
		} 
		catch (IOException e) 
		{
			e.printStackTrace();
		} 
		return null;
	} 

	public static void getProducerRabbitMQ(Connection connection, String message)
	{
		// 创建一个通道
		Channel channel;
		try 
		{
			channel = connection.createChannel();
			//申明一个队列,如果这个队列不存在,将会被创建
	        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
	        // 发送消息
	        channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
	        channel.close();//关闭
	        connection.close();//关闭
		} 
		catch (IOException e) 
		{
			e.printStackTrace();
		}
	}

	public static void getConsumerRabbitMQ(Connection connection)
	{
		// 创建一个通道
		Channel channel;
		try 
		{
			channel = connection.createChannel();
			//申明一个队列,如果这个队列不存在,将会被创建
	        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
	        System.out.println("================等待消息产生:==============");
	        // 创建消费者对象,用于读取消息
	        QueueingConsumer queueingConsumer = new QueueingConsumer(channel);
	        channel.basicConsume(QUEUE_NAME, true, queueingConsumer);
	        // 读取队列,并且阻塞,在读到消息之前在这里阻塞,知道等到消息,完成消息的阅读后,继续阻塞循环
	        while(true)
	        {
	        	QueueingConsumer.Delivery delivery = queueingConsumer.nextDelivery();
	        	String message = new String(delivery.getBody());
	            System.out.println("====s收到消息:====="+message+"==========");
	        }
		} 
		catch (Exception e)
		{
			e.printStackTrace();
		}
	}
}

 5 RabbitMQConsumerServiceImpl.java (还有一个接口) 消费

package com.guilf.project.service.impl;

import org.springframework.stereotype.Service;
import com.guilf.project.rabbitMQ.util.RabbitMQUtil;
import com.guilf.project.service.RabbitMQConsumerService;
import com.rabbitmq.client.Connection;

@Service("rabbitMQConsumerService")
public class RabbitMQConsumerServiceImpl implements RabbitMQConsumerService
{
	public String rabbitMQConsumer(String messger) throws Exception {
		Connection connection = RabbitMQUtil.getConnection();
		RabbitMQUtil.getConsumerRabbitMQ(connection);
		return messger;
	}
}

 6.RabbitMQProducerServiceImpl.java (还有一个接口)生产

package com.guilf.project.service.impl;

import org.springframework.stereotype.Service;

import com.guilf.project.rabbitMQ.util.RabbitMQUtil;
import com.guilf.project.service.RabbitMQProducerService;
import com.rabbitmq.client.Connection;

@Service("rabbitMQProducerService")
public class RabbitMQProducerServiceImpl implements RabbitMQProducerService
{
	public String rabbitMQProducer(String messger) throws Exception {
		Connection connection = RabbitMQUtil.getConnection();
		String message1 = messger;
		System.out.println("=============1========");
		RabbitMQUtil.getProducerRabbitMQ(connection, message1);
		System.out.println("=============2========");
		return messger;
	}
}

 7 RabbitMQTest.java

import org.junit.Test;
import org.junit.Before;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.guilf.project.entity.User;
import com.guilf.project.service.RabbitMQConsumerService;
import com.guilf.project.service.RabbitMQProducerService;
import com.guilf.project.service.UserService;




public class RabbitMQTest
{
	private RabbitMQConsumerService rabbitMQConsumerService;
	private RabbitMQProducerService rabbitMQProducerService;
    
    @Before
    public void before(){                                                                   
        @SuppressWarnings("resource")
        ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"classpath:conf/spring.xml"});
        rabbitMQConsumerService = (RabbitMQConsumerService) context.getBean("rabbitMQConsumerService");
        rabbitMQProducerService = (RabbitMQProducerService) context.getBean("rabbitMQProducerService");
    }

    @Test
   	public void testInsertUser1()
   	{
       	
       	try {
   			rabbitMQProducerService.rabbitMQProducer("guilfFirstRabbitMQ2");
   		} catch (Exception e) {
   			e.printStackTrace();
   		}
   	}
  
    @Test
	public void testInsertUser()
	{
    	try {
			rabbitMQConsumerService.rabbitMQConsumer("w");
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

 7.启动,可以直接传,也可以在mq上直接操作

 

转载于:https://www.cnblogs.com/guilf/p/9269172.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值