依旧是代码:
pom.xml
<dependency> <groupId>io.latent</groupId> <artifactId>storm-rabbitmq</artifactId> <version>1.0.0</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>properties类:
package com.yjp.stormrabbitmq.rabbitmq; import org.springframework.boot.context.properties.ConfigurationProperties; import java.io.Serializable; @ConfigurationProperties(prefix = "spring.storm.rabbitmq") public class RabbitMQProperties implements Serializable { private static final long serialVersionUID = 1L; /** * rabbitmq的ip */ private String ip; /** * rabbitmq的端口号 */ private Integer port; /** * rabbitmq的用户名 */ private String user; /** * rabbitmq的密码 */ private String password; /** * 虚拟消息服务器 每个VirtualHost之间是相互隔离的 */ private String virtualHost; /** * 集群中心跳检测时间间隔 */ private Integer heartBeat; /** * 配置高可用 */ private String highAvailableHosts; public String getIp() { return ip; } public void setIp(String ip) { this.ip = ip; } public Integer getPort() { return port; } public void setPort(Integer port) { this.port = port; } public String getUser() { return user; } public void setUser(String user) { this.user = user; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getVirtualHost() { return virtualHost; } public void setVirtualHost(String virtualHost) { this.virtualHost = virtualHost; } public Integer getHeartBeat() { return heartBeat; } public void setHeartBeat(Integer heartBeat) { this.heartBeat = heartBeat; } public String getHighAvailableHosts() { return highAvailableHosts; } public void setHighAvailableHosts(String highAvailableHosts) { this.highAvailableHosts = highAvailableHosts; } }配置 ConnectionConfig
package com.yjp.stormrabbitmq.rabbitmq; import io.latent.storm.rabbitmq.config.ConfigAvailableHosts; import io.latent.storm.rabbitmq.config.ConnectionConfig; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.io.Serializable; @Configuration @EnableConfigurationProperties({RabbitMQProperties.class}) public class RabbitMQAutoConfiguration implements Serializable { private static final long serialVersionUID = 1L; @Autowired private RabbitMQProperties rabbitMQProperties; /** * 集群环境 高可用 * * @return */ private ConnectionConfig connectionConfig() { ConfigAvailableHosts configAvailableHosts = ConfigAvailableHosts .fromString(rabbitMQProperties.getHighAvailableHosts()); return new ConnectionConfig(configAvailableHosts, rabbitMQProperties.getIp(), rabbitMQProperties.getPort(), rabbitMQProperties.getUserName(), rabbitMQProperties.getPassword(), rabbitMQProperties.getVirtualHost(), rabbitMQProperties.getHeartBeat(), false); } @Bean public ChannelFactory channelFactory() { return new ChannelFactory(connectionConfig()); } /** * 单机环境 * * @return */ // private ConnectionConfig connection() { // return new ConnectionConfig(rabbitMQProperties.getIp(), // rabbitMQProperties.getPort(), rabbitMQProperties.getUserName(), // rabbitMQProperties.getPassword(), rabbitMQProperties.getVirtualHost(), // rabbitMQProperties.getHeartBeat(), false); // } /** * 单机环境的连接 */ // @Bean // public ChannelFactory channelFactory() { // return new ChannelFactory(connection()); // } }配置连接工厂 因为chanel无法被序列化
package com.yjp.stormrabbitmq.rabbitmq; import com.rabbitmq.client.Channel; import com.rabbitmq.client.ConnectionFactory; import io.latent.storm.rabbitmq.config.ConnectionConfig; import java.io.IOException; import java.io.Serializable; public class ChannelFactory implements Serializable { private static final long serialVersionUID = -2287602531757033534L; private ConnectionConfig connectionConfig; public ChannelFactory(ConnectionConfig connectionConfig) { this.connectionConfig = connectionConfig; } public Channel channel() { Channel channel; try { ConnectionFactory connectionFactory = connectionConfig.asConnectionFactory(); //当连接断开时 自动恢复连接 connectionFactory.setAutomaticRecoveryEnabled(true); // 自动恢复连接的时间间隔 默认为5000ms // connectionFactory.setNetworkRecoveryInterval(5000); channel = connectionFactory.newConnection().createChannel(); } catch (IOException e) { throw new RuntimeException("channel创建失败" + e); } return channel; } }注入到需要使用的地方就可以使用了
整合到此结束
努力吧 皮卡丘