springboot整合activeMQ(一)搭建生产者

在这里插入图片描述在自己的项目结构中创建module
在这里插入图片描述选择对应的spring Initializr, jdk,点击继续,根据提示创建完成项目。

在这里插入图片描述

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-activemq</artifactId>
        <version>2.2.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-pool</artifactId>
        <version>5.15.13</version>
    </dependency>
    <dependency>
        <groupId>org.messaginghub</groupId>
        <artifactId>pooled-jms</artifactId>
        <version>1.0.3</version>
    </dependency>
    <!--整合mq end-->

在配置文件中添加配置

spring.activemq.user=admin
spring.activemq.password=******
spring.activemq.broker-url=tcp://127.0.0.1:61616
spring.activemq.in-memory=true
spring.activemq.send-timeout=0
spring.activemq.non-blocking-redelivery=false
spring.activemq.pool.enabled=true
spring.activemq.packages.trust-all=true
spring.jms.pub-sub-domain=true

在这里插入图片描述
创建配置文件

@Configuration
public class ActiveMqConfig {
    // queue模式的ListenerContainer
    @Bean
    public JmsListenerContainerFactory<?> jmsListenerContainerQueue(ConnectionFactory activeMQConnectionFactory) {
        DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory();
        bean.setConnectionFactory(activeMQConnectionFactory);
        return bean;
    }
    // topic模式的ListenerContainer
    @Bean
    public JmsListenerContainerFactory<?> jmsListenerContainerTopic(ConnectionFactory activeMQConnectionFactory) {
        DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory();
        bean.setPubSubDomain(true);
        bean.setConnectionFactory(activeMQConnectionFactory);
        return bean;
    }
    //收发消息的时候,自动把java对象转化成json数据
    @Bean
    public MessageConverter jacksonJmsConverter(){
        MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();

        converter.setTargetType(MessageType.TEXT);
        converter.setTypeIdPropertyName("_type");
        return converter;
    }
    // 这个用于设置 @JmsListener使用的containerFactory
    @Bean
    public JmsListenerContainerFactory<?> msgFactory(ConnectionFactory cf,
                                                     DefaultJmsListenerContainerFactoryConfigurer configurer,
                                                     PlatformTransactionManager transactionManager) {
        DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
        configurer.configure(factory, cf);

        factory.setTransactionManager(transactionManager);
        //factory.setCacheLevelName("CACHE_CONNECTION");
        factory.setReceiveTimeout(10000L);
        factory.setConcurrency("10");//设置并发的去读消息

        return factory;
    }
    @Bean
    public ConnectionFactory connectionFactory(){
        ConnectionFactory cf = new ActiveMQConnectionFactory("tcp://localhost:61616");
        TransactionAwareConnectionFactoryProxy proxy = new TransactionAwareConnectionFactoryProxy();
        proxy.setTargetConnectionFactory(cf);
        proxy.setSynchedLocalTransactionAllowed(true);
        return proxy;
    }

    @Bean
    public JmsTemplate jmsTemplate(ConnectionFactory connectionFactory){
        JmsTemplate jmsTemplate = new JmsTemplate(connectionFactory);
        jmsTemplate.setSessionTransacted(true);
        return jmsTemplate;
    }
}

在这里插入图片描述创建controller 其中 sendOceanQueue第一个参数是mq中的唯一标识OceanQueues, msg是传入的信息值。
接口分两种,一种是点对点,一种是订阅

@GetMapping("common")
    public void common(HttpServletRequest request,
                       HttpServletResponse response, String msg) {
        producerService.sendOceanQueue("OceanQueues" , msg);
        System.out.println(msg);
        BaseAppUtils.responseStr(response,msg);
        //return JsonUtils.buildSuccess("ok");
    }
     /*
    订阅
    多个消费者获取数据
     */
    @GetMapping("commonTopic")
    public void commonTopic(HttpServletRequest request,
                       HttpServletResponse response) {
        for (int i = 1; i <= 10; i++) {
            System.out.println("第" + i + "次发送字符串主题消息");
            producerService.sendOceanTopic("OceanTopic" ,"ocean消息:"+ i);
        }
    }
    

serivice

/**
 * @auther ocean li
 * @date 2020/11/27 - 15:01
 */
public interface ProducerService {
    /**
     * 使用默认消息队列发送消息
     * @param message
     */
    public void sendOceanQueue(String queueName ,  String message);

    public void sendOceanTopic(String queueName ,  String message);

}

Impl 其中
@Autowired
private JmsMessagingTemplate jmsMessagingTemplate;
是在配置文件中的

  @Service
@Transactional// 注解
public class ProducerServiceImpl implements ProducerService {

    @Autowired
    private JmsMessagingTemplate jmsMessagingTemplate;

    @Override
    public void sendOceanQueue(String queueName , String message) {
        jmsMessagingTemplate.convertAndSend(new ActiveMQQueue(queueName), message);
    }

    @Override
    public void sendOceanTopic(String queueName, String message) {
        this.jmsMessagingTemplate.convertAndSend(new ActiveMQTopic(queueName), message);
    }

}

到此生产者已经创建完毕

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值