Laravel 5.7作业队列未运行异步

时间:2019-02-22 20:37:46

标签: php laravel queue jobs

我正尝试使用Laravel 5.7 作业队列在数据库中进行一些插入/更新,并且我可能出错了,因为调用该作业时似乎阻塞了我的应用程序,因此,而不是异步运行。 我的代码具有以下结构:

.env

@Entity
@Table
@Async
@JsonIgnoreProperties(ignoreUnknown=true)
public class Data {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column
private Long id;
@Column
@JsonProperty(value="first_name")
private String firstName;
@Column
@JsonProperty(value="last_name")
private String lastName;
@Column
@JsonProperty(value="phone")
private String phoneNumber;
@Column
@JsonProperty(value="email")
private String email;


public Data() {}

public Long getId() {
    return id;
}
public void setId(Long id) {
    this.id = id;
}
public String getFirstName() {
    return firstName;
}
public void setFirstName(String firstName) {
    this.firstName = firstName;
}
public String getLastName() {
    return lastName;
}
public void setLastName(String lastName) {
    this.lastName = lastName;
}
public String getPhoneNumber() {
    return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
    this.phoneNumber = phoneNumber;
}
public String getEmail() {
    return email;
}
public void setEmail(String email) {
    this.email = email;
}



}

queue.php

BROADCAST_DRIVER=log
CACHE_DRIVER=file
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120

job_caller.php

'default' => env('QUEUE_CONNECTION', 'sync'),

'connections' => [

    'sync' => [
        'driver' => 'sync',
    ],

    'database' => [
        'driver' => 'database',
        'table' => 'jobs',
        'queue' => 'default',
        'retry_after' => 90,
    ],

job_name.php

method_name(){ 
  InsereProspeccao::dispatch($path, $evento, $equipe)->onQueue('jobs');
  retur some_msg_to_user;
}

不好意思:我正在阅读文档,但我想找出错误的地方!

2 个答案:

答案 0 :(得分:5)

您正在使用的QUEUE_CONNECTION=sync基本上具有同步行为。

请按照以下步骤操作:

  • 运行php artisan queue:table,将自动为jobs表创建迁移

  • 运行php artisan migrate,它将通过运行迁移来创建表

  • 更改QUEUE_CONNECTION=database,默认情况下,它将自动使用jobs表来管理队列。

  • 运行php artisan config:clear清除应用程序配置缓存

那应该很好。检查documentation以获得更多帮助。

答案 1 :(得分:1)

尝试一下:QUEUE_CONNECTION=database,应该很好。

您还可以设置rabbitmq或其他驱动程序,因为它们的实现要先进得多,并且可以进行更多生产。但是数据库是一个好的开始。