62,614
社区成员
发帖
与我相关
我的任务
分享
@Configuration
@EnableRabbit
public class RabbitConfiguration {
@Autowired
RabbitProperties properties;
@Bean
public CachingConnectionFactory cachingConnectionFactory(){
CachingConnectionFactory factory = new CachingConnectionFactory();
factory.setAddresses(properties.getAddresses());
factory.setUsername(properties.getUsername());
factory.setPassword(properties.getPassword());
factory.setVirtualHost(properties.getVirtualHost());
factory.setPublisherConfirms(true);
return factory;
}
@Bean
public RabbitAdmin rabbitAdmin() {
return new RabbitAdmin(cachingConnectionFactory());
}
@Bean
public RabbitTemplate rabbitTemplate(CachingConnectionFactory cachingConnectionFactory){
RabbitTemplate template = new RabbitTemplate(cachingConnectionFactory);
template.setMessageConverter(new Jackson2JsonMessageConverter());
return template;
}
}
@Configuration("syncRabbitConfiguration")
@EnableRabbit
public class RabbitConfiguration {
public static final String QUEUE = "external_socket.request";
public static final String EXCHANGE = "external_socket.request";
@Autowired
CachingConnectionFactory cachingConnectionFactory;
@Autowired
RabbitAdmin rabbitAdmin;
@Autowired
SocketConsumer consumer;
@Bean
public FanoutExchange socketExchange(){
return new FanoutExchange(EXCHANGE);
}
@Bean
public Queue socketQueue(){
return new Queue(QUEUE);
}
@Bean
public Binding socketBinding(Queue socketQueue,FanoutExchange socketExchange){
return BindingBuilder.bind(socketQueue).to(socketExchange);
}
@Bean
public SimpleMessageListenerContainer smsContainer(Queue socketQueue){
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
container.setConnectionFactory(cachingConnectionFactory);
container.setAcknowledgeMode(AcknowledgeMode.NONE);
container.setExposeListenerChannel(true);
container.setMaxConcurrentConsumers(1);
container.setConcurrentConsumers(1);
container.setRabbitAdmin(rabbitAdmin);
container.setQueues(socketQueue);
container.setMessageListener(consumer);
container.setRecoveryInterval(MQConstant.Rabbit.DEFAULT_RECOVERY_INTERVAL);
return container;
}
}
@Service
public class SocketConsumer implements ChannelAwareMessageListener {
@Override
public void onMessage(Message message, Channel channel) throws Exception {
String body = null;
try {
body = new String(message.getBody(),"UTF-8");
SimpleDataDto dto = JSONObject.parseObject(body, SimpleDataDto.class);
System.out.println(dto.getSyncType()+":收到消息");
if(dto.getSyncType() == null){
List<SocketIOClient> allClient = SessionManager.getAllClient();
for (SocketIOClient socketIOClient : allClient) {
socketIOClient.sendEvent(dto.getDataType(),dto.getData());
}
}else{
SocketIOClient client = SessionManager.getClient(dto.getSyncType());
if(client !=null)
client.sendEvent(dto.getDataType(),dto.getData());
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}catch (Exception e){
e.printStackTrace();
}
}
}
rabbitTemplate.convertAndSend(RabbitConfiguration.EXCHANGE,"",dataDto);
@Slf4j
@Component
public class RabbitHelper {
@Autowired
private RabbitTemplate rabbitTemplate;
/**
* 广播消息
* @param exchange
* @param message
*/
public void broadcast(String exchange,String message){
rabbitTemplate.convertAndSend(exchange,"",message);
}
}
消费者:
@Slf4j
@Component
public class DownCmdConsumer {
@RabbitListener(bindings = @QueueBinding(
value = @Queue(), //注意这里不要定义队列名称,系统会随机产生
exchange = @Exchange(value = "填写交换机名称",type = ExchangeTypes.FANOUT)
)
)
public void process(String payload) {
log.info("receive:{}",payload)
}
}