You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@activemq.apache.org by "clebert suconic (Jira)" <ji...@apache.org> on 2019/08/28 18:33:00 UTC

[jira] [Commented] (ARTEMIS-2464) the basic usage of core api works weird, but the jms api seems ok

    [ https://issues.apache.org/jira/browse/ARTEMIS-2464?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16917997#comment-16917997 ] 

clebert suconic commented on ARTEMIS-2464:
------------------------------------------

This is as expected. When you use core API dierctly, if you don't specify routing option, you may get different results.

> the basic usage of core api works weird, but the jms api seems ok
> -----------------------------------------------------------------
>
>                 Key: ARTEMIS-2464
>                 URL: https://issues.apache.org/jira/browse/ARTEMIS-2464
>             Project: ActiveMQ Artemis
>          Issue Type: Bug
>          Components: ActiveMQ-Artemis-Native
>    Affects Versions: 2.9.0
>            Reporter: Jay Meng
>            Assignee: clebert suconic
>            Priority: Critical
>
> I'm using artemis 2.9.0(os:macos, oracle jdk 1.8.0_202), I run all the components in localhost
> * my steps:
> start 1 out-of-box standalone broker->start 2 consumer(s)-> start 1 producer -> then give a check
> under 'anycast' mode, 'jms style' works as expected,but 'core sytle' not(works like multicast way).
> under multicast mode,'jms style' all fine,but when using 'core api',if I wrote 'msg.acknowledge()', 'session.commit()' kinda stuff... the core api works like 'anycast',which is not expected,based on my understanding,whether or not client 'acknowledge or commit' the msg,under 'multicast' mode,all the consumers should receive the msg first.
> p.s. broker(simply created a new one, then call 'bin/artemis run' to start it,tiny tuned based on official doc)
> anyway,please check the most basic usage,listed below:
> * my code:
> * *producer(using jms compatible, the legacy style)*: 
> {code:java}
>     ConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");
>     Destination destination = new ActiveMQQueue("test.queue");
>     Connection connection = factory.createConnection();
>     Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
>     MessageProducer producer = session.createProducer(destination);
>     producer.setDeliveryMode(DeliveryMode.PERSISTENT);
>     producer.setDisableMessageID(true);
>     producer.setDisableMessageTimestamp(true);
>     BytesMessage message = session.createBytesMessage();
>     message.writeByte((byte) 1);
>     producer.send(message);
> {code}
> * *producer(using core api,the modern style)*: 
> {code:java}
>     ServerLocator locator = ActiveMQClient.createServerLocator("tcp://localhost:61616");
>     ClientSessionFactory factory = locator.createSessionFactory();
>     ClientSession session = factory.createSession();
>     ClientProducer producer = session.createProducer("test.address");
>     ClientMessage msg = session.createMessage(true).putByteProperty("end", (byte) 1);
>     producer.send(msg);
> {code}
> * *consumer(using jms compatible, the legacy style)*: 
> {code:java}
>     ConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");
>     Destination destination = new ActiveMQQueue("test.queue");
>     Connection connection = factory.createConnection();
>     Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
>     
>     MessageConsumer consumer = session.createConsumer(destination);
>     connection.start();
>     Message msg = consumer.receive();
>     System.out.println(msg);
> {code}
> * *consumer(using core api,the modern style)*: 
> {code:java}
>     ServerLocator locator = ActiveMQClient.createServerLocator("tcp://localhost:61616");
>     ClientSessionFactory factory = locator.createSessionFactory();
>     ClientSession session = factory.createSession();
>     String address = "test.address";
>     String queueName = "test.queue";
>     
>     try {
>       session.createQueue(address, RoutingType.ANYCAST, queueName);
>     } catch (Exception e) {
>       if (!(e instanceof ActiveMQQueueExistsException)) {
>         throw e;
>       }
>     }
>     ClientConsumer consumer = session.createConsumer(queueName);
>     session.start();
>     ClientMessage msg = consumer.receive();
>     System.out.println(msg); 
> {code}
> * pom.xml
> {code:xml}
> <dependency>
>     <groupId>org.apache.activemq</groupId>
>     <artifactId>artemis-jms-client</artifactId>
>     <version>2.9.0</version>
> </dependency>
> {code}
> * broker.xml
> {code:xml}
> <?xml version='1.0'?>
> <configuration xmlns="urn:activemq"
>                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>                xmlns:xi="http://www.w3.org/2001/XInclude"
>                xsi:schemaLocation="urn:activemq /schema/artemis-configuration.xsd">
>    <core xmlns="urn:activemq:core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>          xsi:schemaLocation="urn:activemq:core ">
>       <name>0.0.0.0</name>
>       <persistence-enabled>true</persistence-enabled>
>       <security-enabled>false</security-enabled>
>       <journal-type>MAPPED</journal-type>
>       <paging-directory>data/paging</paging-directory>
>       <bindings-directory>data/bindings</bindings-directory>
>       <journal-directory>data/journal</journal-directory>
>       <large-messages-directory>data/large-messages</large-messages-directory>
>       <journal-datasync>false</journal-datasync>
>       <journal-min-files>2</journal-min-files>
>       <journal-pool-files>10</journal-pool-files>
>       <journal-file-size>10M</journal-file-size>
>       <journal-buffer-timeout>0</journal-buffer-timeout>
>       <journal-max-io>1</journal-max-io>
>       <!-- how often we are looking for how many bytes are being used on the disk in ms -->
>       <disk-scan-period>5000</disk-scan-period>
>       <max-disk-usage>90</max-disk-usage>
>       <critical-analyzer>true</critical-analyzer>
>       <critical-analyzer-timeout>120000</critical-analyzer-timeout>
>       <critical-analyzer-check-period>60000</critical-analyzer-check-period>
>       <critical-analyzer-policy>HALT</critical-analyzer-policy>
>       <acceptors>
>          <acceptor name="artemis">tcp://0.0.0.0:61616?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;protocols=CORE;useEpoll=true</acceptor>
>       </acceptors>
>       <security-settings>
>          <security-setting match="#">
>             <permission type="createNonDurableQueue" roles="amq"/>
>             <permission type="deleteNonDurableQueue" roles="amq"/>
>             <permission type="createDurableQueue" roles="amq"/>
>             <permission type="deleteDurableQueue" roles="amq"/>
>             <permission type="createAddress" roles="amq"/>
>             <permission type="deleteAddress" roles="amq"/>
>             <permission type="consume" roles="amq"/>
>             <permission type="browse" roles="amq"/>
>             <permission type="send" roles="amq"/>
>             <!-- we need this otherwise ./artemis data imp wouldn't work -->
>             <permission type="manage" roles="amq"/>
>          </security-setting>
>       </security-settings>
>       <address-settings>
>          <!-- if you define auto-create on certain queues, management has to be auto-create -->
>          <address-setting match="activemq.management#">
>             <dead-letter-address>DLQ</dead-letter-address>
>             <expiry-address>ExpiryQueue</expiry-address>
>             <redelivery-delay>0</redelivery-delay>
>             <!-- with -1 only the global-max-size is in use for limiting -->
>             <max-size-bytes>-1</max-size-bytes>
>             <message-counter-history-day-limit>10</message-counter-history-day-limit>
>             <address-full-policy>PAGE</address-full-policy>
>             <auto-create-queues>true</auto-create-queues>
>             <auto-create-addresses>true</auto-create-addresses>
>             <auto-create-jms-queues>true</auto-create-jms-queues>
>             <auto-create-jms-topics>true</auto-create-jms-topics>
>          </address-setting>
>          <!--default for catch all-->
>          <address-setting match="#">
>             <dead-letter-address>DLQ</dead-letter-address>
>             <expiry-address>ExpiryQueue</expiry-address>
>             <redelivery-delay>0</redelivery-delay>
>             <!-- with -1 only the global-max-size is in use for limiting -->
>             <max-size-bytes>-1</max-size-bytes>
>             <message-counter-history-day-limit>10</message-counter-history-day-limit>
>             <address-full-policy>PAGE</address-full-policy>
>             <auto-create-queues>true</auto-create-queues>
>             <auto-create-addresses>true</auto-create-addresses>
>             <auto-create-jms-queues>true</auto-create-jms-queues>
>             <auto-create-jms-topics>true</auto-create-jms-topics>
>          </address-setting>
>       </address-settings>
>       <addresses>
>          <address name="DLQ">
>             <anycast>
>                <queue name="DLQ" />
>             </anycast>
>          </address>
>          <address name="ExpiryQueue">
>             <anycast>
>                <queue name="ExpiryQueue" />
>             </anycast>
>          </address>
>       </addresses>
>    </core>
> </configuration>
> {code}



--
This message was sent by Atlassian Jira
(v8.3.2#803003)