activemq中的selector

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jjkang_/article/details/85852720

activemq中的selector

activemq消息中间件可以过滤消息,也就是selector,selector遵循sql 92语法。可以使用IN、NOT IN、LIKE等,例如: LIKE ‘12%3’ (‘123’ true,‘12993’ true,‘1234’ false) LIKE ‘l_se’ (‘lose’ true,‘loose’ false) LIKE ‘_%’ ESCAPE ‘’ (’_foo’ true,‘foo’ false)。

selector只会过滤property中的属性,但是这些属性在消费的时候并没有值,是null。

Producer.java

public class Producer {
    //用户名
    private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;
    //密码
    private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;
    //url
    private static final String URL = ActiveMQConnection.DEFAULT_BROKER_URL;


    private static Connection connection = null;
    private static Session session = null;

    public static void main(String[] args) throws JMSException {
        ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(USERNAME,PASSWORD,URL);
        connection = factory.createConnection();
        connection.start();
        session = connection.createSession(false,Session.CLIENT_ACKNOWLEDGE);

        Queue selector1 = session.createQueue("selector1");
        MessageProducer producer = session.createProducer(selector1);

        MapMessage message1 = session.createMapMessage();
        message1.setString("name","张1");
        message1.setIntProperty("age",23);//selector只能过滤property中的字段,但是这些字段消费的时候是没有的
        message1.setStringProperty("gender","男");
        MapMessage message2 = session.createMapMessage();
        message2.setString("name","张2");
        message2.setIntProperty("age",33);
        message2.setStringProperty("gender","女");
        MapMessage message3 = session.createMapMessage();
        message3.setString("name","张3");
        message3.setIntProperty("age",43);
        message3.setStringProperty("gender","男");
        MapMessage message4 = session.createMapMessage();
        message4.setString("name","张4");
        message4.setIntProperty("age",53);
        message4.setStringProperty("gender","女");

        producer.send(message1);
        producer.send(message2);
        producer.send(message3);
        producer.send(message4);

        connection.close();

    }


Consumer.java

public class Consumer {
    //用户名
    private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;
    //密码
    private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;
    //url
    private static final String URL = ActiveMQConnection.DEFAULT_BROKER_URL;

    private static String SELECTOR_MAN = "gender = '男'";
    private static String SELECTOR_AGE = "age > 30";

    private static String SELECTOR_MAN_AGE = "age > 30 and gender = '男'";

    private static Connection connection = null;
    private static Session session = null;

    public static void main(String[] args) throws Exception {
        ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(USERNAME,PASSWORD,URL);
        connection = factory.createConnection();
        connection.start();
        session = connection.createSession(false,Session.CLIENT_ACKNOWLEDGE);

        Queue selector1 = session.createQueue("selector1");
        MessageConsumer consumer = session.createConsumer(selector1,SELECTOR_MAN_AGE);

        consumer.setMessageListener(new MessageListener() {
            @Override
            public void onMessage(Message message) {
                System.out.println("收到消息");
                if(message instanceof MapMessage){
                    MapMessage m = (MapMessage) message;
                    System.out.println(m.toString());
                    try {
                        System.out.println(m.getString("name"));
                        //System.out.println(m.getString("age"));
                        //System.out.println(m.getString("gender"));
                        m.acknowledge();
                    } catch (JMSException e) {
                        e.printStackTrace();
                    }
                }

            }
        });

    }
}

注意

Selectors表达式中的日期和时间需要使用标准的long型毫秒值,表达式中的属性不会自动进行类型转换

message1.seStringProperty("age","23“)
"age > 1" 求值结果是false。

猜你喜欢

转载自blog.csdn.net/jjkang_/article/details/85852720
今日推荐