当前位置: 代码迷 >> java >> 多个用户如何使用Spring Boot使用Rabbitmq发送消息
  详细解决方案

多个用户如何使用Spring Boot使用Rabbitmq发送消息

热度:40   发布时间:2023-07-17 20:40:38.0

我的目标:我有多个并行运行(独立线程)的作业(进程)。 我想实现消息传递,以便每个进程都可以将消息(如果需要)发送到Rabbitmq服务器。 现在我有这个

@Configuration
public class SenderConfiguration {

    String content = "";
    String host = "";
    String port = "";
    String userName = "";
    String password = "";
    String queueName = "";
    InputStream input = null;

    public SenderConfiguration() {
        init();
    }

    private void init() {
        Properties prop = new Properties();
        try {
            input = new FileInputStream("R.CONFIGURATION_FILE_PATH");
            host = prop.getProperty("messaging.host");
            port = prop.getProperty("messaging.port");
            userName = prop.getProperty("messaging.userName");
            password = prop.getProperty("messaging.password");
            queueName = prop.getProperty("messaging.queue");
        } catch (FileNotFoundException e) {

            e.printStackTrace();
        } finally {
            if (input != null) {
                try {
                    input.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }

    @Bean
    public RabbitTemplate rabbitTemplate() {
        RabbitTemplate template = new RabbitTemplate(connectionFactory());
        template.setRoutingKey(this.queueName);
        return template;
    }

    @Bean
    public ConnectionFactory connectionFactory() {
        CachingConnectionFactory connectionFactory = new CachingConnectionFactory(
                this.host);
        connectionFactory.setUsername(userName);
        connectionFactory.setPassword(password);
        return connectionFactory;
    }

    @Bean
    public ScheduledProducer scheduledProducer() {
        return new ScheduledProducer();
    }

    @Bean
    public BeanPostProcessor postProcessor() {
        return new ScheduledAnnotationBeanPostProcessor();
    }

    static class ScheduledProducer {

        @Autowired
        private volatile RabbitTemplate rabbitTemplate;

        private final AtomicInteger counter = new AtomicInteger();

        @Scheduled(fixedRate = 1000)
        public void sendMessage(String message) {
            rabbitTemplate.convertAndSend("Roxy " + counter.incrementAndGet());
        }
    }

}

并从我的操作之一中调用

new AnnotationConfigApplicationContext(SenderConfiguration.class);

我应该使它成为抽象类吗,我的每个操作/过程都应该对其进行扩展? 什么是最好的方法? 我可以使上述过程更好吗?

只需将单个类与属性占位符一起使用...

采用

@Value("${messaging.host}")
String host;

等等

每个都不需要一个子类。

  相关解决方案