Hi Simon,
You set context variable "queue.behaviourOnUnknownDeclareArgument" as
an attribute in your virtual host initial configuration.
You need to set it as an entry in "context" attribute, for example,
{
...
"context": {
   "queue.behaviourOnUnknownDeclareArgument": "IGNORE"
 }
...
}

Thus, your virtual host initial configuration should be like the one below

{
  "type": "Memory",
  "nodeAutoCreationPolicies": [
    {
      "pattern": ".*",
      "createdOnPublish": "true",
      "createdOnConsume": "true",
      "nodeType": "queue",
      "attributes": {
        "context": {
          "queue.behaviourOnUnknownDeclareArgument": "IGNORE"
        }
      }
    }
  ]
}
or in strigified form


"{\"type\":\"Memory\",\"nodeAutoCreationPolicies\":[{\"pattern\":\".*\",\"createdOnPublish\":\"true\",\"createdOnConsume\":\"true\",\"nodeType\":\"queue\",\"attributes\":
{\"context\": {\"queue.behaviourOnUnknownDeclareArgument\":\"IGNORE\"
}}}]}"

It seems that instructions [1], you followed, are based on Qpid
instructions [2] but I could be wrong.

Kind Regards,
Alex

[1] 
https://novotnyr.github.io/scrolls/qpid-as-mocking-amqp-broker-for-integration-tests/
[2] https://cwiki.apache.org/confluence/display/qpid/How+to+embed+Qpid+Broker-J

On Tue, 30 Mar 2021 at 15:27, Simon Baptista <simonbapti...@hotmail.com> wrote:
>
> Hi,
>
> I'm trying to use QPID in-memory for the purpose of an integration test 
> against a RabbitMQ consumer.
>
> My application uses a RabbitMQ specific queue declaration argument 
> (x-expires). I've seen through googling that 
> "queue.behaviourOnUnknownDeclareArgument: Ignore" Will do what I want to do.
>
> This is what my config looks like at the moment (I'm making guesses about the 
> nodeAutoCreationPolicies being the default template for how elements are 
> created...):
> =======================
> {
>   "name": "Embedded Broker",
>   "modelVersion": "7.0",
>   "authenticationproviders": [
>     {
>       "name": "hardcoded",
>       "type": "Plain",
>       "secureOnlyMechanisms": [],
>       "users": [
>         {
>           "name": "guest",
>           "password": "guest",
>           "type": "managed"
>         }
>       ]
>     }
>   ],
>   "ports": [
>     {
>       "name": "AMQP",
>       "port": "${qpid.amqp_port}",
>       "bindingAddress": "127.0.0.1",
>       "protocols": [
>         "AMQP_0_9_1"
>       ],
>       "authenticationProvider": "hardcoded",
>       "virtualhostaliases": [
>         {
>           "name": "defaultAlias",
>           "type": "defaultAlias"
>         }
>       ]
>     }
>   ],
>   "virtualhostnodes": [
>     {
>       "name": "default",
>       "type": "Memory",
>       "defaultVirtualHostNode": "true",
>       "virtualHostInitialConfiguration": "{\"type\": \"Memory\", 
> \"nodeAutoCreationPolicies\": 
> [{\"pattern\":\".*\",\"createdOnPublish\":\"true\",\"createdOnConsume\":\"true\",\"nodeType\":\"queue\",
>  \"attributes\": {\"queue.behaviourOnUnknownDeclareArgument\":\"IGNORE\"}}]}"
>     }
>   ]
> }
> =========================
>
> And it's doesn't appear to be doing anything as my application is throwing:
> ===============
> java.io.IOException: null
> at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:129)
> at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:125)
> at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:147)
> at com.rabbitmq.client.impl.ChannelN.queueDeclare(ChannelN.java:968)
> at 
> com.rabbitmq.client.impl.recovery.AutorecoveringChannel.queueDeclare(AutorecoveringChannel.java:342)
> ...
> Caused by: com.rabbitmq.client.ShutdownSignalException: connection error; 
> protocol method: #method<connection.close>(reply-code=542, reply-text=Error 
> creating queue 'myqueue_dtmanager_task': Unsupported queue declare 
> argument(s) : x-expires, class-id=50, method-id=10) at 
> com.rabbitmq.utility.ValueOrException.getValue(ValueOrException.java:66)
> ===============
>
>
> This is how I am initialising my broker:
> ===================
>
> public class BrokerManager {
>
>     private static final String DEFAULT_INITIAL_CONFIGURATION_LOCATION = 
> "qpid-it.json";
>
>     private SystemLauncher systemLauncher;
>
>     public BrokerManager() {
>         this.systemLauncher = new SystemLauncher();
>     }
>
>     public void start() throws Exception {
>         this.systemLauncher.startup(createSystemConfig());
>     }
>
>     public void shutdown() {
>         this.systemLauncher.shutdown();
>     }
>
>     private Map<String, Object> createSystemConfig() throws 
> IllegalConfigurationException {
>         Map<String, Object> attributes = new HashMap<>();
>         URL initialConfigUrl = 
> BrokerManager.class.getClassLoader().getResource(DEFAULT_INITIAL_CONFIGURATION_LOCATION);
>         if (initialConfigUrl == null) {
>         throw new IllegalConfigurationException("Configuration location '" + 
> DEFAULT_INITIAL_CONFIGURATION_LOCATION + "' not found");
>     }
>         attributes.put(SystemConfig.TYPE, "Memory");
>         attributes.put(SystemConfig.INITIAL_CONFIGURATION_LOCATION, 
> initialConfigUrl.toExternalForm());
>         attributes.put(SystemConfig.STARTUP_LOGGED_TO_SYSTEM_OUT, true);
>         return attributes;
>     }
> }
>
> ==================
>
> Any help you can offer or documentation you can point me to as to where/how 
> to set the configuration properties on a queue for an in-memory QPID broker 
> would be great as I've been failing spectacularly.
>
> For completeness. I've mostly been following this page 
> https://novotnyr.github.io/scrolls/qpid-as-mocking-amqp-broker-for-integration-tests/
>  and using trial + error
>
> And I am encouraged that this is possible because of the discussion here: 
> https://issues.apache.org/jira/browse/QPID-8388
>
> Thanks in advance,
> Simon.

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@qpid.apache.org
For additional commands, e-mail: users-h...@qpid.apache.org

Reply via email to