spring colud 中使用abbitmq消息队列步骤

使用步骤
一、安装abbitmq服务,具体安装教程网上自行寻找
二、在配置文件中填下面的配置信息

 spring:
  rabbitmq:
   #abbitmq安装IP
    host: localhost
    #abbitmq安装端口
    port: xxxx
    #abbitmq登陆名
    username: xxxx
    #abbitmq登陆密码
    password: 'xxxxxxxxx'
    publisher-confirms: true
    virtual-host: /

三、创建队列常量类
package com.xxxx.util;

public class Constant {
    /*************** 队列常量 **************************/
    public static final String XXXX-XXXX-XXXX = "AAAA-AAAA-AAAA";
    public static final String YYYY-YYYY-YYYY= "BBBB-BBBB-BBBB";
}

在abbitmq控制中心显示的队列名为 “AAAA-AAAA-AAAA”,而不是 XXXX-XXXX-XXXX

四、创建一个abbitmq的配置,让Spring Boot加载,要使用@Configuration表示这是个配置类

import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.core.AcknowledgeMode;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.rabbit.listener.RabbitListenerContainerFactory;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.converter.MappingJackson2MessageConverter;

import com.xxxx.util.Constant;
@Configuration
public class RabbitConfig {
    //每一个队列都需要创建一个@Bean
	@Bean
	public Queue loginLogQueue() {
		return new Queue(Constant.XXXX-XXXX-XXXX);
	}
	
	@Bean
	public Queue opLoginQueue() {
		return new Queue(Constant.YYYY-YYYY-YYYY);
	}

	public MappingJackson2MessageConverter jackson2Converter() {
		MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
		return converter;
	}

	@Bean
	public RabbitListenerContainerFactory<?> rabbitListenerContainerFactory(ConnectionFactory connectionFactory) {
		SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
		factory.setConnectionFactory(connectionFactory);
		factory.setMessageConverter(new Jackson2JsonMessageConverter());
		// 开启手动 ack
		factory.setAcknowledgeMode(AcknowledgeMode.MANUAL);
		return factory;
	}
}

五、开始使用队列
创建一个Service接口

public interface Model Service {
   //model是一个实体参数
	public void record(Model model);
}

实现类

@Service
public class ModelServiceImpl implements ModelService {

    @Autowired
    private AmqpTemplate amqpTemplate;


    //@Async(value="asyncServiceExecutor")配合上一篇文章,可以使用线程池
    @Override
    public void record(Model model ) {
        //这个步骤可以没有,在这里我有是因为在下面一步中参数一直报错,所以强转为json
		String json=JSONObject.toJSON(model ).toString();
		//将消息放入队列中等待消费
        amqpTemplate.convertAndSend(Constant.XXXX-XXXX-XXXX, json);
       // amqpTemplate.convertAndSend(Constant.XXXX-XXXX-XXXX, model );
	}
}

将消息放入队列中等待消费,在这一步程序只把消息放入队列中就返回,消费队列将异步进行

接下来就是在Listener里消费队列里的消息

@Component
public class ModelListener {
	@Autowired
	private ModelService modelService;

	@RabbitHandler
	@RabbitListener(queues = Constant.XXXX-XXXX-XXXX)
	public void process(Message msg, Channel channel) {
		ObjectMapper objectMapper = new ObjectMapper();
		Model model;//参数实体类
		try {
		   //在这里通过msg获取到传进来的参数,通过队列传进来后参数转换为String类型
			String log = new String(msg.getBody());
			//将log转换为实体类Model 
			model= objectMapper.readValue(log, Model.class);
			//....在这里用model进行自己的逻辑
		} catch (JsonParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (JsonMappingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}		
			try {
				// 确认消息
				channel.basicAck(msg.getMessageProperties().getDeliveryTag(), false);
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
}

这篇消息队列文章可以和上篇线程池文章配合使用

Spring Cloud是一个用于构建分布式系统的开发工具包,它提供了一系列的组件和功能,使得开发人员可以更轻松地构建和管理分布式应用程序。 要将Spring Cloud添加到你的项目,你可以按照以下步骤进行操作: 1. 在你的项目添加Spring Cloud的依赖。你可以通过Maven或Gradle来管理项目的依赖。下面是添加Spring Cloud依赖的示例: Maven: ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter</artifactId> <version>2.2.2.RELEASE</version> </dependency> ``` Gradle: ```groovy implementation 'org.springframework.cloud:spring-cloud-starter:2.2.2.RELEASE' ``` 请确保将版本号替换为你需要使用的实际版本。 2. 在你的Spring Boot应用程序的入口类上添加`@EnableDiscoveryClient`注解,以启用服务注册和发现功能。示例代码如下: ```java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @SpringBootApplication @EnableDiscoveryClient public class YourApplication { public static void main(String[] args) { SpringApplication.run(YourApplication.class, args); } } ``` 3. 根据你的需求,添加其他Spring Cloud组件的依赖。Spring Cloud提供了许多有用的组件,如服务注册与发现(Eureka、Consul)、负载均衡(Ribbon)、熔断器(Hystrix)等。你可以根据自己的需求选择添加相应的依赖。 以上是将Spring Cloud添加到你的项目的基本步骤。根据具体的需求和使用场景,你可能需要进一步配置和使用Spring Cloud的其他功能。你可以参考Spring Cloud的官方文档和示例代码来深入学习和了解Spring Cloud的更多功能和用法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值