camel activemq & activemq 总结

  1. ActiveMQ有两种消息处理机制 queue和 topic

queue与topic的技术特点对比

Topic和queue的最大区别在于topic是以广播的形式,通知所有在线监听的客户端有新的消息,没有监听的客户端将收不到消息;而queue则是以点对点的形式通知多个处于监听状态的客户端中的一个。

  1. activemq 三个属性 delay、period、repeat 延迟、周期、重复

  1. camel activemq代码

import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.camel.builder.endpoint.EndpointRouteBuilder;
import org.apache.camel.component.jms.JmsComponent;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import javax.jms.ConnectionFactory;
import java.util.concurrent.atomic.AtomicInteger;

@Component
public class ClientRouteV2 extends EndpointRouteBuilder {

    AtomicInteger sendInteger = new AtomicInteger(0);

    AtomicInteger handleInteger = new AtomicInteger(0);

    @Value("${spring.activemq.user}")
    String userName;
    @Value("${spring.activemq.password}")
    String passWord;
    @Value("${spring.activemq.broker-url}")
    String brokerUrl;


    @Override
    public void configure() throws Exception {

        ConnectionFactory connectionfactory =
                new ActiveMQConnectionFactory(userName, passWord, brokerUrl);

        getContext().getRegistry().bind("activemq", JmsComponent.jmsComponentAutoAcknowledge(connectionfactory));

        from("timer://foo?fixedRate=true&period=1000&repeatCount=10")
                .process(exchange -> {
                    sendInteger.getAndIncrement();
                    exchange.getIn().setBody("HELLO from Camel!");
                    System.out.println("producer setBody----" + exchange.getIn().getBody() + "========" + sendInteger.get());
                })
                .to(activemq("queue:testCamel222").requestTimeout(200)
//                .to(activemq("topic:testCamel222").requestTimeout(200)

                );

        from(activemq("queue:testCamel222"))
//        from(activemq("topic:testCamel222"))
                .threads(20) // 增加线程池,提高并发处理能力
                .bean(TestBean.class, "test(String,String)")
                .process(exchange -> {
                    handleInteger.getAndIncrement();
                    System.out.println("consumer getBody----" + exchange.getIn().getBody() + "========" + handleInteger.get());
                })
        ;
    }
}

下面是个bean拼装

import org.apache.camel.Headers;

public class TestBean {

    public String test(@Headers String topic, String body) {
        System.out.println("consumer body 拼装前----"+body);
        return "test camel+activemq==="+body;
    }
}

下面是配置文件

spring:
  jms:
    pub-sub-domain: true
  activemq:
    broker-url: xxx
    in-memory: true
    pool:
      enabled: true
    packages:
      trust-all: true
    user: xxx
    password: xxx

server:
  port: 8089

jms:
  topic:
    name: 1234dfd

引入jar包

         <dependency>
            <groupId>org.apache.camel.springboot</groupId>
            <artifactId>camel-timer-starter</artifactId>
            <version>${camel.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-activemq</artifactId>
            <version>${camel.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-all</artifactId>
            <version>5.17.4</version>
        </dependency>

        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-endpointdsl</artifactId>
            <version>${camel.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-core</artifactId>
            <version>${camel.version}</version>
        </dependency>

        <properties>
        <camel.version>3.14.2</camel.version>
        </properties>

上述代码意思是:定时器进入,走十次,一秒一次,进入process 给 body赋值,发送请求到activemq,超时时间单位是毫秒,我写200就是图快。下面form是activemq 拉取消息内容并处理,需要注意的是topic 发完接不到也不管,但queue 发完了,会监听然后消费

  1. 原生activemq

太繁琐了,不写了,自定百度找demo吧

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值