Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
L
laravel-mongodb
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
sinan
laravel-mongodb
Commits
df5e3a10
Commit
df5e3a10
authored
Feb 10, 2016
by
Jens Segers
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix queue support #623
parent
1d0f18c5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
119 additions
and
0 deletions
+119
-0
MongodbServiceProvider.php
src/Jenssegers/Mongodb/MongodbServiceProvider.php
+9
-0
MongoConnector.php
src/Jenssegers/Mongodb/Queue/MongoConnector.php
+42
-0
MongoQueue.php
src/Jenssegers/Mongodb/Queue/MongoQueue.php
+45
-0
QueueTest.php
tests/QueueTest.php
+13
-0
TestCase.php
tests/TestCase.php
+10
-0
No files found.
src/Jenssegers/Mongodb/MongodbServiceProvider.php
View file @
df5e3a10
<?php
namespace
Jenssegers\Mongodb
;
<?php
namespace
Jenssegers\Mongodb
;
use
Illuminate\Support\ServiceProvider
;
use
Illuminate\Support\ServiceProvider
;
use
Jenssegers\Mongodb\Queue\MongoConnector
;
class
MongodbServiceProvider
extends
ServiceProvider
class
MongodbServiceProvider
extends
ServiceProvider
{
{
...
@@ -19,10 +20,18 @@ class MongodbServiceProvider extends ServiceProvider
...
@@ -19,10 +20,18 @@ class MongodbServiceProvider extends ServiceProvider
*/
*/
public
function
register
()
public
function
register
()
{
{
// Add database driver.
$this
->
app
->
resolving
(
'db'
,
function
(
$db
)
{
$this
->
app
->
resolving
(
'db'
,
function
(
$db
)
{
$db
->
extend
(
'mongodb'
,
function
(
$config
)
{
$db
->
extend
(
'mongodb'
,
function
(
$config
)
{
return
new
Connection
(
$config
);
return
new
Connection
(
$config
);
});
});
});
});
// Add connector for queue support.
$this
->
app
->
resolving
(
'queue'
,
function
(
$queue
)
{
$queue
->
addConnector
(
'mongodb'
,
function
()
{
return
new
MongoConnector
(
$this
->
app
[
'db'
]);
});
});
}
}
}
}
src/Jenssegers/Mongodb/Queue/MongoConnector.php
0 → 100644
View file @
df5e3a10
<?php
namespace
Jenssegers\Mongodb\Queue
;
use
Illuminate\Database\ConnectionResolverInterface
;
use
Illuminate\Queue\Connectors\ConnectorInterface
;
use
Illuminate\Support\Arr
;
class
MongoConnector
implements
ConnectorInterface
{
/**
* Database connections.
*
* @var \Illuminate\Database\ConnectionResolverInterface
*/
protected
$connections
;
/**
* Create a new connector instance.
*
* @param \Illuminate\Database\ConnectionResolverInterface $connections
* @return void
*/
public
function
__construct
(
ConnectionResolverInterface
$connections
)
{
$this
->
connections
=
$connections
;
}
/**
* Establish a queue connection.
*
* @param array $config
* @return \Illuminate\Contracts\Queue\Queue
*/
public
function
connect
(
array
$config
)
{
return
new
MongoQueue
(
$this
->
connections
->
connection
(
Arr
::
get
(
$config
,
'connection'
)),
$config
[
'table'
],
$config
[
'queue'
],
Arr
::
get
(
$config
,
'expire'
,
60
)
);
}
}
src/Jenssegers/Mongodb/Queue/MongoQueue.php
0 → 100644
View file @
df5e3a10
<?php
namespace
Jenssegers\Mongodb\Queue
;
use
Carbon\Carbon
;
use
Illuminate\Queue\DatabaseQueue
;
class
MongoQueue
extends
DatabaseQueue
{
/**
* Get the next available job for the queue.
*
* @param string|null $queue
* @return \StdClass|null
*/
protected
function
getNextAvailableJob
(
$queue
)
{
$job
=
parent
::
getNextAvailableJob
(
$queue
);
if
(
$job
)
{
$job
->
id
=
$job
->
_id
;
}
return
$job
;
}
/**
* Release the jobs that have been reserved for too long.
*
* @param string $queue
* @return void
*/
protected
function
releaseJobsThatHaveBeenReservedTooLong
(
$queue
)
{
$expired
=
Carbon
::
now
()
->
subSeconds
(
$this
->
expire
)
->
getTimestamp
();
$reserved
=
$this
->
database
->
collection
(
$this
->
table
)
->
where
(
'queue'
,
$this
->
getQueue
(
$queue
))
->
where
(
'reserved'
,
1
)
->
where
(
'reserved_at'
,
'<='
,
$expired
)
->
get
();
foreach
(
$reserved
as
$job
)
{
$attempts
=
$job
[
'attempts'
]
+
1
;
$this
->
releaseJob
(
$job
[
'_id'
],
$attempts
);
}
}
}
tests/QueueTest.php
0 → 100644
View file @
df5e3a10
<?php
class
QueueTest
extends
TestCase
{
public
function
testQueue
()
{
$id
=
Queue
::
push
(
'test'
,
[
'foo'
=>
'bar'
],
'test'
);
$this
->
assertNotNull
(
$id
);
$job
=
Queue
::
pop
(
'test'
);
$this
->
assertInstanceOf
(
'Illuminate\Queue\Jobs\DatabaseJob'
,
$job
);
}
}
tests/TestCase.php
View file @
df5e3a10
...
@@ -29,11 +29,21 @@ class TestCase extends Orchestra\Testbench\TestCase
...
@@ -29,11 +29,21 @@ class TestCase extends Orchestra\Testbench\TestCase
$config
=
require
'config/database.php'
;
$config
=
require
'config/database.php'
;
$app
[
'config'
]
->
set
(
'app.key'
,
'ZsZewWyUJ5FsKp9lMwv4tYbNlegQilM7'
);
$app
[
'config'
]
->
set
(
'database.default'
,
'mongodb'
);
$app
[
'config'
]
->
set
(
'database.default'
,
'mongodb'
);
$app
[
'config'
]
->
set
(
'database.connections.mysql'
,
$config
[
'connections'
][
'mysql'
]);
$app
[
'config'
]
->
set
(
'database.connections.mysql'
,
$config
[
'connections'
][
'mysql'
]);
$app
[
'config'
]
->
set
(
'database.connections.mongodb'
,
$config
[
'connections'
][
'mongodb'
]);
$app
[
'config'
]
->
set
(
'database.connections.mongodb'
,
$config
[
'connections'
][
'mongodb'
]);
$app
[
'config'
]
->
set
(
'auth.model'
,
'User'
);
$app
[
'config'
]
->
set
(
'auth.model'
,
'User'
);
$app
[
'config'
]
->
set
(
'cache.driver'
,
'array'
);
$app
[
'config'
]
->
set
(
'cache.driver'
,
'array'
);
$app
[
'config'
]
->
set
(
'queue.default'
,
'mongodb'
);
$app
[
'config'
]
->
set
(
'queue.connections.mongodb'
,
[
'driver'
=>
'mongodb'
,
'table'
=>
'jobs'
,
'queue'
=>
'default'
,
'expire'
=>
60
,
]);
}
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment