rocketmq 示例


rocketmq 示例

 

 

*****************************

引入 jar 包

 

<dependency>
    <groupId>org.apache.rocketmq</groupId>
    <artifactId>rocketmq-client</artifactId>
    <version>4.5.2</version>
</dependency>

 

 

*****************************

相关类与接口

 

MQProducer:消息发送接口

public interface MQProducer extends MQAdmin {

    void start() throws MQClientException;
    void shutdown();

    List<MessageQueue> fetchPublishMessageQueues(String var1) throws MQClientException;


**********
消息轮询发送

    SendResult send(Message var1) throws MQClientException, RemotingException, MQBrokerException, InterruptedException;
    SendResult send(Message var1, long var2) throws MQClientException, RemotingException, MQBrokerException, InterruptedException;

    void send(Message var1, SendCallback var2) throws MQClientException,
RemotingException, InterruptedException;
    void send(Message var1, SendCallback var2, long var3) throws MQClientException, RemotingException, InterruptedException;

    void sendOneway(Message var1) throws MQClientException, RemotingException, InterruptedException;


**********
发送到指定队列

    SendResult send(Message var1, MessageQueue var2) throws MQClientException, RemotingException, MQBrokerException, InterruptedException;
    SendResult send(Message var1, MessageQueue var2, long var3) throws MQClientException, RemotingException, MQBrokerException, InterruptedException;

    void send(Message var1, MessageQueue var2, SendCallback var3) throws MQClientException, RemotingException, InterruptedException;
    void send(Message var1, MessageQueue var2, SendCallback var3, long var4) throws MQClientException, RemotingException, InterruptedException;

    void sendOneway(Message var1, MessageQueue var2) throws MQClientException, RemotingException, InterruptedException;


**********
根据参数var3使用MessageQueueSelector选择消息发送队列

    SendResult send(Message var1, MessageQueueSelector var2, Object var3) throws MQClientException, RemotingException, MQBrokerException, InterruptedException;
    SendResult send(Message var1, MessageQueueSelector var2, Object var3, long var4) throws MQClientException, RemotingException, MQBrokerException, InterruptedException;

    void send(Message var1, MessageQueueSelector var2, Object var3, SendCallback var4) throws MQClientException, RemotingException, InterruptedException;
    void send(Message var1, MessageQueueSelector var2, Object var3, SendCallback var4, long var5) throws MQClientException, RemotingException, InterruptedException;

    void sendOneway(Message var1, MessageQueueSelector var2, Object var3) throws MQClientException, RemotingException, InterruptedException;


**********
发送事务消息

    TransactionSendResult sendMessageInTransaction(Message var1, LocalTransactionExecuter var2, Object var3) throws MQClientException;
    TransactionSendResult sendMessageInTransaction(Message var1, Object var2) throws MQClientException;


**********
批量发送消息

    SendResult send(Collection<Message> var1) throws MQClientException, RemotingException, MQBrokerException, InterruptedException;
    SendResult send(Collection<Message> var1, long var2) throws MQClientException, RemotingException, MQBrokerException, InterruptedException;

    SendResult send(Collection<Message> var1, MessageQueue var2) throws MQClientException, RemotingException, MQBrokerException, InterruptedException;
    SendResult send(Collection<Message> var1, MessageQueue var2, long var3) throws MQClientException, RemotingException, MQBrokerException, InterruptedException;
}

 

 

Message:消息类

public class Message implements Serializable {
    private static final long serialVersionUID = 8445773977080406428L;
    private String topic;
    private int flag;
    private Map<String, String> properties;
    private byte[] body;
    private String transactionId;

    public Message() {
    }

    public Message(String topic, byte[] body) {
        this(topic, "", "", 0, body, true);
    }

    public Message(String topic, String tags, String keys, int flag, byte[] body, boolean waitStoreMsgOK) {
                  //设置消息topic、tags、keys、falg、body、waitStoreMsgOK
        this.topic = topic;
        this.flag = flag;
        this.body = body;
        if (tags != null && tags.length() > 0) {
            this.setTags(tags);
        }

        if (keys != null && keys.length() > 0) {
            this.setKeys(keys);
        }

        this.setWaitStoreMsgOK(waitStoreMsgOK);
    }

    public Message(String topic, String tags, byte[] body) {
        this(topic, tags, "", 0, body, true);
    }

    public Message(String topic, String tags, String keys, byte[] body) {
        this(topic, tags, keys, 0, body, true);
    }

    void putProperty(String name, String value) {
    void clearProperty(String name) {

    public void putUserProperty(String name, String value) {
    public String getUserProperty(String name) {
    public String getProperty(String name) {

    public String getTopic() {
    public void setTopic(String topic) {

    public String getTags() {
    public void setTags(String tags) {

    public String getKeys() {
    public void setKeys(Collection<String> keys) {
    public void setKeys(String keys) {


    public int getDelayTimeLevel() {
    public void setDelayTimeLevel(int level) {

    public boolean isWaitStoreMsgOK() {
    public void setWaitStoreMsgOK(boolean waitStoreMsgOK) {
    public void setInstanceId(String instanceId) {

    public int getFlag() {
    public void setFlag(int flag) {

    public byte[] getBody() {
    public void setBody(byte[] body) {

    public Map<String, String> getProperties() {
    void setProperties(Map<String, String> properties) {

    public String getBuyerId() {
    public void setBuyerId(String buyerId) {

    public String getTransactionId() {
    public void setTransactionId(String transactionId) {

    public String toString() {
        return "Message{topic='" + this.topic + '\'' + ", flag=" + this.flag + ", properties=" + this.properties + ", body=" + Arrays.toString(this.body) + ", transactionId='" + this.transactionId + '\'' + '}';
    }
}

 

 

MQConsumer:消息消费接口

public interface MQConsumer extends MQAdmin {

    void sendMessageBack(MessageExt var1, int var2, String var3) throws RemotingException, MQBrokerException, InterruptedException, MQClientException;

    Set<MessageQueue> fetchSubscribeMessageQueues(String var1) throws MQClientException;
}

 

MQPushConsumer:broker采用push方式,消费端消费接口

public interface MQPushConsumer extends MQConsumer {

    void start() throws MQClientException;
    void shutdown();

    void registerMessageListener(MessageListenerConcurrently var1);  //消费端并发消费
    void registerMessageListener(MessageListenerOrderly var1);       //消费端顺序消费

    void subscribe(String var1, String var2) throws MQClientException;  //订阅topic(var1),使用tag过滤
    void subscribe(String var1, MessageSelector var2) throws MQClientException;
                                                                        //订阅topic(var1),使用messageSelector过滤

    void unsubscribe(String var1);

    void updateCorePoolSize(int var1);
    void suspend();
    void resume();
}

 

MessageSelector:消息过滤

public class MessageSelector {
    private String type;
    private String expression;

    private MessageSelector(String type, String expression) {
        this.type = type;
        this.expression = expression;
    }

    public static MessageSelector bySql(String sql) {  //使用sql过滤
        return new MessageSelector("SQL92", sql);
    }

    public static MessageSelector byTag(String tag) {  //使用tag过滤
        return new MessageSelector("TAG", tag);
    }

    public String getExpressionType() {
        return this.type;
    }

    public String getExpression() {
        return this.expression;
    }
}

 

 

*****************************

示例

 

*******************

producer 端

 

@Service
public class ProducerService {

    @Value("${rocketmq.producerGroup}")
    private String producerGroup;

    @Value("${rocketmq.namesrv}")
    private String namesrv;

    private DefaultMQProducer producer;

************************
创建producer

    @PostConstruct
    public void initDefaultMQProducer(){
        producer=new DefaultMQProducer(producerGroup);
        producer.setNamesrvAddr(namesrv);
        producer.setRetryTimesWhenSendFailed(2);

        try{
            producer.start();
        }catch (Exception e){
            e.printStackTrace();
        }
    }

********************************
同步发送

    public void sendInSync(){
        for (int i=0;i<100;i++){
            try{
                Message message=new Message("topic","sync",("瓜田李下"+i).getBytes());
                SendResult result=producer.send(message);
                System.out.println(result);
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }

********************************
异步发送

    public void sendInAsync(){
        for (int i=0;i<100;i++){
            try{
                Message message=new Message("topic","async",("瓜田李下 2"+i).getBytes());
                producer.send(message, new SendCallback() {
                    @Override
                    public void onSuccess(SendResult sendResult) {
                        System.out.println("发送成功");
                        System.out.println(sendResult);
                    }

                    @Override
                    public void onException(Throwable throwable) {
                        System.out.println("发送失败");
                        System.out.println(throwable.getMessage());
                    }
                });
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }

*******************************
单向发送

    public void sendOneWay(){
        for (int i=0;i<100;i++){
            try{
                Message message=new Message("topic","oneWay",("瓜田李下 3"+i).getBytes());
                producer.sendOneway(message);
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }

    @PreDestroy
    public void destroy(){
        if(producer!=null){
            producer.shutdown();
        }
    }
}

 

*******************

consumer 端

 

@Service
public class ConsumerService {

    @Value("${rocketmq.consumerGroup}")
    private String consumerGroup;

    @Value("${rocketmq.namesrv}")
    private String namesrv;

    @PostConstruct
    public void consumeSync(){
        DefaultMQPushConsumer consumer=new DefaultMQPushConsumer(consumerGroup);
        consumer.setNamesrvAddr(namesrv);
        consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);

        try{
            Thread.sleep(4000);
            consumer.subscribe("topic","*");
            consumer.registerMessageListener((MessageListenerConcurrently) (list, consumeConcurrentlyContext) -> {
                try{
                    for(MessageExt messageExt:list){
                        String body=new String(messageExt.getBody());
                        System.out.println(body);
                        System.out.println("消费时间:"+System.currentTimeMillis());
                    }

                    return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
                }catch (Exception e){
                    System.out.println("消费失败");
                    return ConsumeConcurrentlyStatus.RECONSUME_LATER;
                }
            });
        }catch (Exception e){
            e.printStackTrace();
        }

        try{
            consumer.start();
        }catch (Exception e){
            e.printStackTrace();
        }
    }

}

 

*****************************

控制台输出

 

        

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值